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

Небольшой, но полный API

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

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

Хранилище — это Map в памяти, поэтому пример остаётся самодостаточным. Node.js выполняет ваши обработчики один за другим в одном потоке, так что блокировки здесь не нужны; настоящий сервер заменил бы Map на базу данных, а форма обработчиков не изменилась бы.


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

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

Тело приходит не целиком сразу, поэтому небольшая вспомогательная функция readBody собирает фрагменты с помощью for await, прежде чем их увидит JSON.parse.

POST /users и GET /users

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

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

Чтение одного, замена, удаление

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

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

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

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