JS: REST API (Fastify)
Теория: Реализация CRUD
Теперь, когда проект настроен, база данных подключена, и вы получили общее представление о современной REST-архитектуре, настало время перейти к практике. В этом уроке мы сосредоточимся на создании простых API, чтобы закрепить теоретические знания на конкретных примерах. Рассмотрим работу с ресурсом User и реализуем CRUD-операции (Create, Read, Update, Delete) для него.
Список пользователей
Начнем с реализации эндпоинта для получения списка всех пользователей. Этот эндпоинт будет располагаться по адресу /api/users. Для этого создадим файл routes/api/users.js со следующим содержимым:
Разберем код подробнее:
- Fastify автоматически добавляет префикс /api в адрес, так как это файл находится внутри директории routes/api.
- Fastify автоматически преобразует возвращаемый объект в JSON и отдает его клиенту с выставленными заголовками. По умолчанию код ответа 200.
Проверим, что все работает:
-
Запустим сервер в отдельной вкладке
-
Выполним запрос на /api/users с помощью
curl. Запрос вернет записи, описанные в файле с сидами. Каждый перезапуск сервера будет возвращать разные данные, так как внутри используется faker для их генерации.
В реальных приложениях часто требуется ограничить количество возвращаемых записей, например, при выводе длинных списков. Для этого используется постраничная навигация, которую можно реализовать с помощью параметров LIMIT и OFFSET в SQL-запросе.
LIMIT ограничивает количество записей, возвращаемых запросом, а OFFSET определяет, с какой записи начинать выборку. Таким образом, для получения первой страницы используется offset = 0, для второй — offset = 1, и так далее.
Параметр page позволяет клиенту указать, какую страницу данных он хочет получить. Например, запрос с page=2 вернет вторую страницу данных. Теперь, если вы выполните запрос с параметром page, вы получите соответствующую страницу пользователей:
Один пользователь
Следующим шагом добавим возможность получения данных конкретного пользователя по его идентификатору (id). Эндпоинт будет располагаться по адресу /api/users/
.Этот эндпоинт принимает параметр id из URL и использует его для поиска пользователя в базе данных. Если пользователь с таким идентификатором найден, он возвращается в виде JSON-объекта. В случае, если пользователь не найден, возвращается ошибка с кодом 404.
Последнее поведение реализовано с помощью механизма fastify.assert(). Он позволяет сократить логику проверки существования объекта и сразу вернуть правильный код ответа если объекта не существует. Первым параметром метод принимает объект, который может быть null, вторым - код ответа если вместо объекта был передан null.
Создание пользователя
Для создания нового пользователя добавим следующий API-эндпоинт /api/users. В отличие от предыдущих, он выполняется методом POST.
Этот эндпоинт принимает данные нового пользователя в теле запроса и сохраняет их в базе данных. После успешного создания пользователя сервер возвращает код 201 и данные нового пользователя. Из-за изменения кода ответа, нам недостаточно просто вернуть объект с данными. Здесь мы возвращаем объект reply установив внутри него код ответа и добавив данные через метод send(), который сам преобразует данные в JSON.
Обновление пользователя
Для обновления данных существующего пользователя добавим API-эндпоинт /api/users/
. В данном случае это плейсхолдер, который будет заменен на конкретное число во время формирования ответа.Этот эндпоинт позволяет обновить данные пользователя с указанным id. Запрос должен содержать новые данные в теле. Если пользователь с таким id найден и обновлен, возвращается обновленный объект пользователя. Если пользователя не существует, возвращается ошибка с кодом 404.
Удаление пользователя
Для удаления пользователя по его идентификатору добавим следующий API-эндпоинт /api/users/
Этот эндпоинт удаляет пользователя с указанным id из базы данных. Если пользователь найден и успешно удален, возвращается код 204 без тела ответа. Если пользователь не найден, возвращается ошибка с кодом 404. Такое поведение DELETE соответствует спецификации HTTP.
Заключение
С этими эндпоинтами мы реализовали полный набор операций CRUD (Create, Read, Update, Delete) для работы с ресурсом пользователя в нашем API. Эти примеры охватывают основные операции, которые вы будете использовать при разработке REST API, и закладывают основу для более сложных операций и взаимодействий. В дальнейшем эти базовые операции могут быть расширены и дополнены в зависимости от требований вашего приложения, например, добавлением авторизации, валидации данных, обработки ошибок и других аспектов, характерных для реального продакшена.
Рекомендуемые программы
Завершено
0 / 15
