Как писать api на php

Как писать api на php

При разработке современных веб-приложений умение создавать API стало обязательным навыком для разработчиков. PHP, несмотря на свою репутацию языка для написания серверных скриптов, прекрасно подходит для создания RESTful API. В этой статье мы разберем процесс создания API с нуля, фокусируясь на использовании стандартных инструментов PHP и минимизации зависимости от сторонних библиотек.

Для начала важно определиться с архитектурой API. Наиболее популярным подходом является использование архитектуры REST, которая позволяет разделить логику работы с данными и клиентскую сторону. API на PHP может быть построено с использованием простых инструментов, таких как встроенные функции для работы с HTTP-запросами, а также базы данных для хранения информации. Важно помнить, что чистота архитектуры и понятные интерфейсы для пользователей API – ключевые аспекты успешного проекта.

Следующий шаг – планирование структуры URL и типов запросов. Один из самых распространенных подходов в REST – это использование глаголов HTTP: GET для получения данных, POST для создания, PUT для обновления и DELETE для удаления. Каждый запрос должен быть четко привязан к конкретной сущности, что позволит поддерживать API гибким и масштабируемым. Например, если мы разрабатываем API для работы с книгами, запросы будут выглядеть как /books для получения списка всех книг, /books/{id} для работы с конкретной книгой.

Для обеспечения безопасности важно включить механизмы авторизации и аутентификации. Один из самых простых и популярных методов – это использование JWT (JSON Web Tokens), который позволяет безопасно передавать информацию между клиентом и сервером без необходимости хранить сессии на сервере. Реализация JWT в PHP требует лишь несколько шагов: создание и проверка токена, обработка ошибок и защита эндпоинтов.

Настройка окружения для разработки API на PHP

Для создания API на PHP потребуется правильно настроить серверное окружение. Рекомендуется использовать LAMP-стек (Linux, Apache, MySQL/MariaDB, PHP), так как он наиболее стабилен и подходит для разработки веб-приложений. Рассмотрим шаги по настройке необходимого окружения.

1. Установка и настройка веб-сервера Apache

Apache является популярным веб-сервером, который идеально подходит для работы с PHP. Установите его с помощью команды:

sudo apt update
sudo apt install apache2

После установки убедитесь, что сервис запущен:

sudo systemctl start apache2
sudo systemctl enable apache2

Для настройки виртуальных хостов в Apache создайте конфигурационный файл для вашего API и добавьте путь к директории с кодом.

2. Установка PHP

Для работы с PHP установите последнюю стабильную версию, используя команду:

sudo apt install php libapache2-mod-php

Чтобы убедиться, что PHP корректно работает, создайте файл info.php в директории вашего веб-сервера с содержимым:

<?php phpinfo(); ?>

Затем откройте этот файл в браузере. Если PHP настроен правильно, вы увидите подробную информацию о версии и настройках.

3. Установка и настройка базы данных (MySQL или MariaDB)

Для хранения данных API потребуется база данных. Установите MySQL или MariaDB. Для MySQL используйте команду:

sudo apt install mysql-server

Запустите MySQL и настройте безопасный доступ:

sudo systemctl start mysql
sudo mysql_secure_installation

Создайте пользователя и базу данных для API с помощью команд:

sudo mysql -u root -p
CREATE DATABASE api_db;
CREATE USER 'api_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON api_db.* TO 'api_user'@'localhost';

4. Установка Composer

Composer – это менеджер зависимостей для PHP, который позволит управлять библиотеками и пакетами. Установите Composer с помощью команды:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

После установки можно проверить работу Composer командой:

composer --version

5. Установка и настройка Postman или аналогичного инструмента для тестирования API

Для тестирования REST API используйте Postman, который позволяет легко отправлять запросы и проверять ответы. Установите Postman с официального сайта или через Snap:

sudo snap install postman

Также можно использовать аналогичные инструменты, такие как Insomnia или Curl, в зависимости от предпочтений.

6. Настройка .env файла для хранения конфигурации

Для безопасного хранения данных подключения к базе данных и других конфигурационных настроек создайте файл .env. Используйте библиотеку vlucas/phpdotenv, чтобы загружать переменные окружения из этого файла. Для этого добавьте в проект команду:

composer require vlucas/phpdotenv

Создайте файл .env в корне проекта и добавьте в него параметры, например:

DB_HOST=localhost
DB_NAME=api_db
DB_USER=api_user
DB_PASS=password

Затем загрузите эти параметры в PHP с помощью следующего кода:

use Dotenv\Dotenv;
$dotenv = Dotenv::createImmutable(DIR);
$dotenv->load();

Теперь вы можете безопасно использовать переменные окружения в коде без необходимости хранить конфиденциальные данные в публичных репозиториях.

7. Рекомендации по выбору IDE и настройке инструментов для работы с PHP

Для удобства разработки рекомендуется использовать IDE с поддержкой PHP, например, PhpStorm или VS Code с расширением PHP Intelephense. Эти инструменты обеспечивают автодополнение, отладку и анализ кода. Настройте линтеры и форматирование для соблюдения стандартов кодирования, таких как PSR-12.

После настройки окружения для разработки API на PHP можно приступать к написанию кода. Правильная настройка серверной части и инструментов существенно ускорит процесс разработки и тестирования вашего API.

Создание простого REST API с использованием PHP

Для создания REST API на PHP, нужно придерживаться принципов работы с HTTP-методами и обработки запросов. Рассмотрим шаги для создания простого API, который будет взаимодействовать с данными в формате JSON.

Предположим, что наш API будет работать с ресурсом «Пользователи». Мы создадим API, которое позволит получать список пользователей, добавлять нового пользователя и удалять пользователя по ID.

1. Структура проекта

1. Структура проекта

Создайте структуру папок и файлов:

  1. api/
  2. api/users.php
  3. api/db.php
  4. api/config.php

В файле config.php будут храниться настройки базы данных, а в db.php – функции для работы с базой данных.

2. Настройка конфигурации

В config.php создайте настройки подключения к базе данных:



Этот файл будет подключаться к базе данных MySQL, где мы будем хранить данные о пользователях.

3. Подключение к базе данных

3. Подключение к базе данных

В файле db.php подключите конфигурацию и создайте функции для работы с БД:


connect_error) {
die("Connection failed: " . $conn->connect_error);
}
return $conn;
}
function getUsers() {
$conn = getDbConnection();
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
$users = [];
while ($row = $result->fetch_assoc()) {
$users[] = $row;
}
$conn->close();
return $users;
}
function addUser($name, $email) {
$conn = getDbConnection();
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$stmt->execute();
$stmt->close();
$conn->close();
}
function deleteUser($id) {
$conn = getDbConnection();
$stmt = $conn->prepare("DELETE FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->close();
$conn->close();
}
?>

4. Обработка запросов API

4. Обработка запросов API

В файле users.php реализуем обработку HTTP-запросов. Начнем с обработки методов GET, POST и DELETE:


name;
$email = $data->email;
addUser($name, $email);
echo json_encode(['message' => 'User added successfully']);
break;
case 'DELETE':
$data = json_decode(file_get_contents("php://input"));
$id = $data->id;
deleteUser($id);
echo json_encode(['message' => 'User deleted successfully']);
break;
default:
http_response_code(405);
echo json_encode(['message' => 'Method not allowed']);
}
?>

5. Тестирование API

Чтобы протестировать API, используйте инструменты, такие как Postman или cURL. Примеры запросов:

  • Получить список пользователей (GET): GET http://localhost/api/users.php
  • Добавить нового пользователя (POST): POST http://localhost/api/users.php с телом запроса в формате JSON:
    
    {
    "name": "John Doe",
    "email": "john@example.com"
    }
    
  • Удалить пользователя (DELETE): DELETE http://localhost/api/users.php с телом запроса в формате JSON:
    
    {
    "id": 1
    }
    

API отвечает на запросы в формате JSON, что упрощает интеграцию с фронтенд-приложениями.

6. Советы по улучшению

  • Для обеспечения безопасности используйте подготовленные запросы и защите от SQL-инъекций.
  • Добавьте обработку ошибок для более детальной информации о сбоях.
  • Для улучшения производительности можно внедрить кэширование.
  • Добавьте валидацию данных на стороне сервера, чтобы избежать создания некорректных записей.

Этот простой пример демонстрирует основы создания REST API с помощью PHP, который может быть расширен и доработан в зависимости от конкретных требований проекта.

Организация маршрутизации запросов в API на PHP

Маршрутизация запросов – ключевая часть построения API, которая отвечает за правильное распределение входящих HTTP-запросов на соответствующие обработчики. Для этого в PHP можно использовать как готовые фреймворки, так и собственные решения. Рассмотрим, как можно организовать маршрутизацию с нуля, без сторонних библиотек.

Основная задача маршрутизатора – это анализ URL-запроса и HTTP-метода (GET, POST, PUT, DELETE) и передача их в нужный контроллер и метод. Чтобы эффективно организовать маршрутизацию, необходимо учитывать несколько важных аспектов.

1. Определение маршрутов

Маршрут обычно состоит из пути (например, /users) и метода запроса (GET, POST и т.д.). В простом API маршруты могут выглядеть так:

/users    -> GET    -> метод для получения списка пользователей
/users    -> POST   -> метод для создания нового пользователя
/users/{id} -> GET  -> метод для получения конкретного пользователя по ID

Для реализации этого на PHP можно использовать массивы для хранения маршрутов. Ключами будут являться пути, а значениями – массивы с методами и функциями, которые будут обрабатывать эти запросы.

2. Обработка запросов

При получении запроса, маршрутизатор должен проверить путь и метод и направить запрос в соответствующую функцию. В PHP это может выглядеть следующим образом:

$routes = [
'GET' => [
'/users' => 'getUsers',
'/users/{id}' => 'getUserById',
],
'POST' => [
'/users' => 'createUser',
],
];
$requestMethod = $_SERVER['REQUEST_METHOD'];
$requestUri = $_SERVER['REQUEST_URI'];
if (isset($routes[$requestMethod][$requestUri])) {
call_user_func($routes[$requestMethod][$requestUri]);
} else {
// Ошибка маршрута
echo "Route not found!";
}

Здесь метод GET для /users будет обрабатывать функцию getUsers, а POST запрос к тому же маршруту – createUser.

3. Поддержка параметров в маршрутах

Многие маршруты включают параметры, такие как ID ресурса. Для их поддержки можно использовать регулярные выражения для динамической подстановки значений в пути. Например, путь /users/{id} можно представить как /users/(\d+), где \d+ соответствует числовому ID пользователя.

$routes = [
'GET' => [
'/users/(\d+)' => 'getUserById',
],
];
if (preg_match('/^\/users\/(\d+)$/', $requestUri, $matches)) {
call_user_func($routes[$requestMethod][$requestUri], $matches[1]);
}

В данном примере, если путь соответствует регулярному выражению, то извлеченный параметр (например, ID пользователя) передается в функцию getUserById.

4. Использование базового маршрутизатора

Для более удобной работы с маршрутами можно создать класс маршрутизатора, который будет управлять всеми аспектами маршрутизации. Например, класс может хранить все маршруты, проверять соответствие запросов и обрабатывать параметры. Пример простого маршрутизатора:

class Router {
private $routes = [];
public function addRoute($method, $path, $handler) {
$this->routes[$method][$path] = $handler;
}
public function handleRequest($method, $uri) {
if (isset($this->routes[$method][$uri])) {
call_user_func($this->routes[$method][$uri]);
} else {
echo "Route not found!";
}
}
}
$router = new Router();
$router->addRoute('GET', '/users', 'getUsers');
$router->addRoute('POST', '/users', 'createUser');
$router->handleRequest($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);

Такой подход упрощает добавление новых маршрутов и делает код более читаемым.

5. Использование фреймворков

Если проект требует более сложной логики маршрутизации или работы с различными HTTP-методами, проще воспользоваться фреймворками, такими как Laravel или Symfony, которые предоставляют готовые решения для маршрутизации. Они предлагают более гибкие и мощные инструменты для работы с маршрутами, включая поддержку промежуточных слоев, групп маршрутов и т.д.

Тем не менее, знание основ маршрутизации на PHP важно, поскольку оно помогает лучше понимать, как работают фреймворки и при необходимости позволяет писать собственные легковесные решения.

Использование JSON для обмена данными в API

В API JSON обычно используется для передачи как запросов, так и ответов. Клиент отправляет данные в формате JSON через HTTP-запрос (обычно POST или PUT), а сервер обрабатывает их и возвращает результат в таком же формате. Использование JSON исключает необходимость в сложных преобразованиях данных и снижает вероятность ошибок.

Чтобы отправить данные в формате JSON через API в PHP, можно использовать функцию json_encode() для преобразования массива или объекта в строку JSON. Например:

$data = ['name' => 'John', 'age' => 30];
$json_data = json_encode($data);

Получив запрос с данными в JSON-формате, сервер должен обработать его, используя json_decode(), чтобы преобразовать строку JSON обратно в массив или объект PHP. Пример:

$json_input = file_get_contents('php://input');
$data = json_decode($json_input, true);

Важно учитывать, что при получении данных от клиента, сервер должен обрабатывать возможные ошибки, такие как неверный формат JSON или проблемы с кодировкой. Для этого рекомендуется использовать json_last_error(), чтобы проверить корректность данных после выполнения json_decode():

if (json_last_error() !== JSON_ERROR_NONE) {
// обработка ошибки
}

В ответах сервера формат JSON также используется для отправки данных обратно клиенту. Для этого можно применить заголовок Content-Type: application/json, чтобы указать, что ответ будет представлен в формате JSON. Пример:

header('Content-Type: application/json');
echo json_encode($response_data);

При проектировании API важно учитывать безопасность при работе с JSON. Например, сервер должен проверять входящие данные на наличие потенциально опасных значений, таких как SQL-инъекции или XSS-атаки. Также следует учитывать максимальный размер данных, которые можно отправить в JSON-формате, чтобы избежать ошибок, связанных с превышением лимитов размера запроса.

JSON является стандартом для обмена данными, но его использование требует внимательного подхода к обработке ошибок, безопасности и оптимизации. Выбор этого формата для API помогает упростить взаимодействие между клиентом и сервером, ускоряя процесс разработки и снижая вероятность возникновения ошибок.

Реализация методов GET, POST, PUT и DELETE для работы с ресурсами

Метод GET используется для получения информации о ресурсе. Он не должен изменять состояние сервера. Например, запрос для получения данных о пользователе:

 'User not found']);
}
}
?>

Здесь важно, чтобы запросы GET не изменяли данные на сервере. Они должны лишь извлекать информацию.

Метод POST применяется для создания нового ресурса. Когда мы отправляем данные с помощью POST, сервер должен создать новый объект и вернуть его в ответе. Пример реализации:

 $id, 'name' => $data['name'], 'email' => $data['email']]);
} else {
http_response_code(400);
echo json_encode(['error' => 'Invalid data']);
}
}
?>

При реализации метода POST важно проверять валидность данных и обеспечивать безопасное добавление новой информации в базу.

Метод PUT используется для обновления существующего ресурса. В отличие от POST, PUT предполагает полную замену ресурса, а не добавление нового. Пример обновления пользователя:

 $id, 'name' => $data['name'], 'email' => $data['email']]);
} else {
http_response_code(404);
echo json_encode(['error' => 'User not found']);
}
} else {
http_response_code(400);
echo json_encode(['error' => 'Invalid data']);
}
}
?>

При использовании PUT следует гарантировать, что все данные для обновления предоставляются пользователем. Важно правильно обработать ситуацию, когда ресурс не существует.

Метод DELETE удаляет ресурс. Он должен быть реализован таким образом, чтобы возвращать статус успешного удаления или ошибку, если ресурс не найден:

 'User deleted successfully']);
} else {
http_response_code(404);
echo json_encode(['error' => 'User not found']);
}
}
?>

Метод DELETE должен безопасно удалять данные, не оставляя ошибок в базе данных.

При проектировании API важно соблюдать принципы REST и правильно обрабатывать все запросы. Каждый метод имеет свою семантику и не должен выполнять действия, которые противоречат его назначению. Например, GET не должен изменять данные, а DELETE – создавать ресурсы. Соблюдение этих принципов обеспечит корректную работу API и его совместимость с другими системами.

Обработка ошибок и исключений в API

При разработке API на PHP важно правильно обрабатывать ошибки и исключения, чтобы гарантировать стабильность и безопасность системы. В API ошибки должны быть не только зарегистрированы, но и корректно переданы клиенту, чтобы тот мог адекватно реагировать на проблему.

PHP предоставляет несколько инструментов для обработки ошибок и исключений. Основные подходы включают использование try-catch блоков, обработку ошибок через настройки конфигурации и логирование.

1. Использование блоков try-catch

1. Использование блоков try-catch

Для перехвата и обработки исключений в PHP используется конструкция try-catch. Исключения могут возникать в любом месте кода, и важно перехватывать их, чтобы не допустить сбоя работы API. В блоке catch можно указать действия, которые должны быть выполнены при возникновении исключения.


try {
// Код, который может вызвать исключение
$result = someFunction();
} catch (Exception $e) {
// Обработка исключения
logError($e->getMessage());
sendErrorResponse(500, "Внутренняя ошибка сервера");
}

В этом примере если функция someFunction() выбрасывает исключение, оно будет перехвачено, зарегистрировано и отправлен ответ с кодом ошибки.

2. Правильные HTTP коды

Ответы с ошибками должны содержать правильные HTTP статус-коды. Это позволяет клиентам API быстро определять тип ошибки. Примеры кодов ошибок:

  • 400 — Неверный запрос. Используется, если переданные данные некорректны.
  • 401 — Не авторизован. Клиент не прошел аутентификацию.
  • 403 — Доступ запрещен. Клиент не имеет прав для выполнения операции.
  • 404 — Ресурс не найден.
  • 500 — Внутренняя ошибка сервера.
  • 503 — Сервис недоступен.

Каждый ответ API должен включать код статуса, который точно отражает произошедшую ошибку.

3. Логирование ошибок

Логирование ошибок помогает отслеживать и анализировать проблемы на сервере. Используйте встроенные функции PHP, такие как error_log(), или подключайте более сложные решения для логирования, например, Monolog.

Важно логировать:

  • Сообщения об исключениях.
  • Стек вызовов (stack trace), чтобы быстро находить источник ошибки.
  • Данные, которые вызвали ошибку, если это не нарушает безопасность.

Пример логирования с использованием Monolog:


use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('api_errors');
$logger->pushHandler(new StreamHandler('path/to/your.log', Logger::ERROR));
try {
// Ваш код
} catch (Exception $e) {
$logger->error($e->getMessage(), ['exception' => $e]);
}

4. Обработка ошибок валидации данных

Одним из частых источников ошибок в API являются неверные или неполные данные, отправленные пользователем. В таких случаях важно возвращать информативные сообщения с указанием конкретных ошибок валидации.

  • Для проверки данных используйте регулярные выражения, фильтры или специализированные библиотеки валидации.
  • Не отправляйте общие ошибки типа «Неверный запрос». Укажите, какие конкретно поля некорректны.

Пример обработки ошибки валидации:


$data = $_POST['user_data'];
if (empty($data['name'])) {
sendErrorResponse(400, "Поле 'name' не может быть пустым.");
}

5. Глобальная обработка ошибок

Для перехвата необработанных ошибок можно использовать функции set_error_handler() и set_exception_handler(). Они позволяют настроить глобальную обработку ошибок и исключений, что полезно для регистрации ошибок, которых не удалось избежать на уровне отдельных компонентов.


set_error_handler('customErrorHandler');
set_exception_handler('customExceptionHandler');
function customErrorHandler($errno, $errstr) {
logError("Ошибка: $errstr");
sendErrorResponse(500, "Внутренняя ошибка сервера");
}
function customExceptionHandler($exception) {
logError($exception->getMessage());
sendErrorResponse(500, "Внутренняя ошибка сервера");
}

6. Безопасность ошибок

Важно не раскрывать клиентам чувствительную информацию о сервере, базе данных или архитектуре. Например, не стоит передавать в ответах полные сообщения об ошибках, такие как пути файлов или подробности конфигурации сервера. Вместо этого используйте общие сообщения с кодами ошибок.

  • Ошибки должны быть логированы, но не отображаться пользователю.

Обработка ошибок и исключений – ключевая часть разработки безопасных и стабильных API. Правильная реализация этих механизмов повышает удобство использования вашего API и помогает поддерживать его надежность.

Вопрос-ответ:

Какой базовый набор инструментов мне нужен для написания API на PHP?

Для создания API на PHP вам понадобится веб-сервер (например, Apache или Nginx), установленный PHP (желательно версии 7.4 и выше), а также база данных, если ваш API будет работать с данными (например, MySQL или PostgreSQL). Также желательно использовать Composer для управления зависимостями и фреймворк для ускорения разработки, например, Laravel или Slim. Важно настроить правильно файл `.htaccess` для обработки маршрутов и включить поддержку CORS, если API будет доступен с других доменов.

Что такое RESTful API и чем оно отличается от других типов API?

RESTful API — это архитектурный стиль для разработки веб-сервисов, который использует HTTP-протокол и стандартные HTTP-методы (GET, POST, PUT, DELETE и другие). REST основывается на принципах статeless (каждый запрос должен содержать всю необходимую информацию) и ресурсо-ориентированности (каждое API взаимодействует с конкретными ресурсами). В отличие от SOAP, который использует XML для обмена сообщениями и требует сложной настройки, REST проще в использовании и лучше поддерживает работу с различными форматами данных, такими как JSON.

Как безопасно обрабатывать запросы к API на PHP?

Для безопасной работы с API на PHP важно учитывать несколько аспектов. Во-первых, используйте HTTPS для защиты данных при передаче по сети. Во-вторых, валидируйте все входящие данные — не доверяйтесь данным, получаемым от клиента. Это защитит от атак, таких как SQL-инъекции и XSS. Также не забывайте о механизмах аутентификации и авторизации, таких как OAuth 2.0 или JWT, для ограничения доступа к API. Регулярно обновляйте зависимости и следите за безопасностью используемых библиотек. Важно также настроить правильные права доступа к серверу и базе данных.

Нужно ли использовать фреймворк для написания API на PHP?

Использование фреймворка для написания API на PHP не обязательно, но это может существенно упростить разработку. Фреймворки, такие как Laravel, Symfony или Slim, предлагают встроенные инструменты для маршрутизации, обработки запросов, а также для работы с базами данных и валидацией данных. Это позволяет сосредоточиться на логике API, а не на базовых аспектах реализации. Если вы хотите создать простое API и не используете сложную бизнес-логику, можно обойтись без фреймворка, но фреймворки обеспечивают лучшую структуру и поддерживаемость проекта в долгосрочной перспективе.

Как настроить маршруты в API на PHP?

Для настройки маршрутов в API на PHP можно использовать несколько подходов. Если вы работаете без фреймворка, вам нужно вручную обрабатывать URL-запросы с помощью PHP-функций `$_GET`, `$_POST` или `$_SERVER`. В более сложных случаях можно использовать библиотеку для маршрутизации, такую как FastRoute или AltoRouter. Если же вы используете фреймворк (например, Laravel), маршруты настраиваются через специальные файлы конфигурации, где прописываются URL-шаблоны и соответствующие им обработчики. В любом случае, важно продумать структуру маршрутов и убедиться, что они соответствуют REST-принципам для удобства использования API.

Как создать API на PHP с нуля?

Для создания API на PHP нужно выполнить несколько шагов. Сначала создайте серверный скрипт, который будет обрабатывать HTTP-запросы. Вам понадобится настроить сервер, например, Apache или Nginx, с поддержкой PHP. Затем, используйте методы, такие как GET, POST, PUT, DELETE, для обработки запросов и отправки ответов. Чтобы отправить данные в формате JSON, не забудьте установить заголовок Content-Type на application/json. Важно организовать маршрутизацию, чтобы каждый запрос направлялся на нужную функцию или обработчик. Для упрощения работы с маршрутизацией можно использовать фреймворки, такие как Laravel или Slim.

Как обрабатывать ошибки и исключения при разработке API на PHP?

Для обработки ошибок и исключений в API на PHP важно использовать блоки try-catch. Если в процессе выполнения запроса происходит ошибка, она может быть поймана в блоке catch, и вы сможете вернуть корректный ответ с нужным HTTP статусом, например, 500 для серверной ошибки. Также стоит создавать кастомные исключения для разных типов ошибок (например, для ошибок валидации данных или авторизации), чтобы обработка была более предсказуемой. В ответах на ошибки можно передавать не только код, но и описание проблемы, чтобы пользователи API могли легче понять, что пошло не так.

Ссылка на основную публикацию