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

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

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

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


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

Шаблоны с методами в mux направляют каждый глагол своему обработчику. Создание отвечает 201 Created и указывает на новый ресурс заголовком Location; удаление отвечает 204 No Content — успех, о котором нечего сказать.

GET, POST и DELETE для одного ресурса

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

Prompt
Напишите программу на Go с mux, который обрабатывает GET /notes (200 со строкой списка), POST /notes (201 с заголовком Location) и DELETE /notes/{id} (204, пустое тело). Запустите сервер через httptest, отправьте три запроса и выведите для каждого метод, код состояния и заголовок Location или тело ответа, если они есть.
Вывод: программа на Go и захваченный вывод

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

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

200, 404 и 405

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

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