Перейти к основному содержимому

Говорите то, что имеете в виду

REST API общается двумя словарями. Метод говорит, чего хочет клиент: GET — прочитать, POST — создать, PUT — заменить, PATCH — изменить часть, DELETE — удалить. Код состояния говорит, как всё прошло: 2xx — успех, 4xx — ошибка клиента, 5xx — ошибка сервера.

Деталь, о которой стоит знать: PUT идемпотентен — отправить его дважды заканчивается тем же, чем один раз. POST — нет: два POST создают два ресурса.


Правильный метод

Маршрутизатор читает глагол из $_SERVER["REQUEST_METHOD"] и направляет каждый в свою ветку. Создание отвечает 201 Created и указывает на новый ресурс заголовком Location; удаление отвечает 204 No Content — успех, о котором нечего сказать.

GET, POST и DELETE на одном ресурсе

Три глагола, три ответа: список возвращается с 200, создание — с 201 и Location, удаление — с 204 и пустым телом.

Prompt
Напишите PHP-скрипт, маршрутизатор которого проверяет $_SERVER["REQUEST_METHOD"] и обрабатывает GET /notes (200 со строкой списка), POST /notes (201 с заголовком Location) и DELETE /notes/{id} (204, пустое тело). Запустите его на встроенном сервере, отправьте три запроса и выведите для каждого метод, код состояния и заголовок Location или тело, если они есть.
Вывод: PHP-скрипт

Правильный код состояния

Ошибки тоже заслуживают точности: отсутствующий ресурс — это 404 Not Found (с JSON-телом ошибки, чтобы его могли прочитать программы), а неверный глагол на известном пути — 405 Method Not Allowed, с заголовком Allow, перечисляющим глаголы, которые сработали бы. Скрипт-маршрутизатор отвечает на оба случая сам, выбирая состояние через http_response_code().

200, 404 и 405

Существующая заметка возвращает 200 с данными, отсутствующая — 404 с JSON-ошибкой, а DELETE на маршруте только для GET отклоняется с 405 и заголовком Allow: GET.

Prompt
Напишите PHP-скрипт, обработчик GET /notes/{id} которого возвращает 200 с JSON для существующей заметки, 404 с JSON-телом ошибки для отсутствующей, а на любой другой метод отвечает 405 и заголовком Allow: GET. Запустите его на встроенном сервере, запросите существующую заметку, отсутствующую заметку и отправьте DELETE, чтобы показать 405 с его заголовком Allow. Выведите все три результата.
Вывод: PHP-скрипт