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

Небольшой, но законченный API

Пора собрать все части вместе: API пользователей с пятью классическими эндпоинтами —

POST /users создать · GET /users получить список · GET /users/{id} прочитать одного · PUT /users/{id} заменить · DELETE /users/{id} удалить.

Хранилище — это map в памяти, поэтому пример остаётся самодостаточным. (Настоящий сервер обрабатывает запросы параллельно, поэтому в промышленной версии map защищали бы блокировкой и, вероятно, заменили бы базой данных — форма обработчиков при этом не изменилась бы.)


Создание и список

POST декодирует входящий JSON, присваивает пользователю id, сохраняет его и отвечает 201 с созданной записью — вместе с id, чтобы клиент его узнал. GET возвращает всех в виде JSON-массива.

POST /users и GET /users

Два создания, затем список: каждый POST отвечает 201 с сохранённым пользователем, а финальный GET показывает обоих — состояние API росло с каждым запросом.

Prompt
Напишите программу на Go, реализующую часть «создание и список» REST API пользователей с mux и map в памяти: POST /users декодирует JSON, присваивает id и отвечает 201 с созданным пользователем; GET /users отвечает JSON-массивом всех пользователей. Запустите сервер через httptest, создайте Ana и Ben, получите их список и выведите каждый статус и тело ответа.
Вывод: программа на Go и захваченный вывод

Прочитать одного, заменить, удалить

Маршруты с {id} дополняют набор: чтение отвечает 200 или 404, замена декодирует новые данные в существующий id, удаление отвечает 204. После удаления тот же GET, который раньше работал, честно возвращает 404 — ресурса больше нет.

GET, PUT и DELETE для /users/{id}

Полная жизнь одного ресурса: прочитать его, заменить (ответ несёт новое имя), удалить и не суметь прочитать — каждый шаг с правильным кодом состояния.

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