Создано ШІУлучшено людьми

Riqli · жівые документы · обновляются постоянно

Синергія знань ШІ та практики людей.

Поделіться з друзьями
image

Проектирование и реализация REST/HTTP API

разделы

Введение: цель и рамки курса

содержаніе

Аннотация. Курс посвящён проектированию и реализации REST/HTTP API — одному из ключевых навыков современного backend- и fullstack-разработчика. Материал охватывает полный цикл: от выбора ресурсной модели и методов HTTP до документирования контракта, пагинации, обработки ошибок и тестирования. Рассматриваются как фреймворковые подходы (Spring Boot, FastAPI, Flask), так и реализация HTTP-сервера на чистом Java SE без внешних зависимостей.

Цель. Сформировать практические навыки проектирования и реализации RESTful-сервисов, соответствующих принципам архитектурного стиля REST и стандартам HTTP.

Результаты обучения. По завершении курса слушатель сможет: выделять ресурсы предметной области и проектировать URL-структуру; сопоставлять CRUD-операции с HTTP-методами; выбирать стратегию пагинации с учётом профиля нагрузки; проектировать формат ошибок на основе HTTP-кодов состояния; документировать API с помощью OpenAPI; применять инструменты тестирования (Postman, curl) для верификации контракта.

Целевая аудитория. Backend-разработчики, fullstack-инженеры, технические лидеры и архитекторы, имеющие базовый опыт создания HTTP-сервисов и желающие систематизировать знания о проектировании REST API.

разделы

Ресурсная модель и именование

содержаніе

Ключевая идея REST — представление предметной области в виде совокупности ресурсов. Ресурс — это любая сущность, к которой можно обратиться по уникальному идентификатору: пользователь, заказ, товар, документ. Идентификатор ресурса выражается через URL.

Проектирование начинается с выбора существительных для обозначения ресурсов и построения логичной иерархии. Для ресурса «книги» корневой URL — /books, для конкретного экземпляра — /books/{id}. Вложенные ресурсы отражают отношение принадлежности: /authors/{id}/books — книги конкретного автора.

Соглашения об именовании должны применяться последовательно во всём API. Ресурсы в URL — существительные во множественном числе: /users, /orders, /items. Глаголы в URL не используются — действие определяется HTTP-методом. Регистр — нижний, разделитель слов — дефис (/user-profiles) или camelCase, но единообразно для всего проекта.

Хорошая практика — сразу предусмотреть версионирование: /api/v1/users. Это защищает клиентов от ломающих изменений при развитии API. Версия может передаваться и через заголовок (Accept: application/vnd.api.v1+json), но путь — наиболее явный и распространённый вариант.


вопросы

Какой URL соответствует ресурсу «конкретный заказ с идентификатором 42» в RESTful-дизайне?

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

GET /orders/42

объясненія

В REST ресурсы обозначаются существительными во множественном числе, а конкретный экземпляр идентифицируется через параметр пути. Метод GET указывает на операцию чтения, а не на действие в URL.

ответыНеправильний

GET /getOrder?id=42

ответыНеправильний

POST /orders/42/get

ответыНеправильний

GET /order/42


вопросы

Почему в RESTful API не рекомендуется использовать глаголы в URL, например /getUsers или /createOrder?

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

Действие определяется HTTP-методом, а URL должен идентифицировать ресурс, а не операцию над ним

объясненія

REST отделяет идентификацию ресурса (URL) от семантики операции (HTTP-метод). Это обеспечивает единообразие интерфейса и позволяет клиентам работать с API предсказуемо.

ответыНеправильний

Глаголы в URL увеличивают длину строки запроса и замедляют маршрутизацию

ответыНеправильний

HTTP-серверы не поддерживают глаголы в URL

ответыНеправильний

Глаголы в URL делают API несовместимым с JSON

разделы

HTTP-методы и семантика операций

содержаніе

HTTP-методы — стандартные глаголы, определяющие тип действия над ресурсом. В REST каждый метод сопоставляется с операцией CRUD:

  • GET — чтение ресурса или коллекции. Возвращает 200 OK. Не изменяет состояние сервера.
  • POST — создание нового ресурса в коллекции. Возвращает 201 Created с заголовком Location, указывающим на созданный ресурс.
  • PUT — полная замена ресурса. Если ресурс не существует, может создать его. Идемпотентен.
  • PATCH — частичное обновление ресурса. Передаются только изменяемые поля.
  • DELETE — удаление ресурса. Возвращает 200 OK или 204 No Content. Идемпотентен.

Особое внимание уделяется идемпотентности — свойству, при котором повторный вызов метода приводит к тому же состоянию сервера, что и однократный. GET, PUT и DELETE идемпотентны. POST — нет: повторная отправка создаёт дубликаты.

Коды состояния сообщают клиенту результат операции. Для успешных операций: 200 (OK), 201 (Created), 204 (No Content). Для ошибок клиента: 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found). Для ошибок сервера: 500 (Internal Server Error).


вопросы

Какой HTTP-метод следует использовать для создания нового ресурса в коллекции?

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

POST

объясненія

POST семантически означает отправку данных для создания подчинённого ресурса в коллекции. Успешный ответ — 201 Created.

ответыНеправильний

GET

ответыНеправильний

PUT

ответыНеправильний

DELETE


вопросы

Какое свойство HTTP-метода гарантирует, что повторная отправка запроса не изменит состояние сервера иначе, чем однократная?

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

Идемпотентность

объясненія

Идемпотентность — свойство, при котором повторный вызов метода с теми же параметрами приводит к тому же результату, что и первый вызов. GET, PUT и DELETE идемпотентны; POST — нет.

ответыНеправильний

Асинхронность

ответыНеправильний

Безопасность

ответыНеправильний

Кэшируемость


вопросы

Какой код состояния HTTP следует вернуть при успешном создании ресурса?

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

201 Created

объясненія

Код 201 Created явно указывает клиенту, что запрос привёл к созданию нового ресурса. В заголовке Location обычно передаётся URL созданного ресурса.

ответыНеправильний

200 OK

ответыНеправильний

204 No Content

ответыНеправильний

302 Found

разделы

Формат данных и схемы

содержаніе

Современные REST API используют JSON как основной формат обмена данными благодаря лаконичности и нативной поддержке в браузерах и большинстве языков программирования. Альтернатива — XML — сохраняется в legacy-системах и некоторых корпоративных протоколах.

При проектировании API определяется схема данных для каждого ресурса: перечень полей, их типы, обязательность и правила валидации. Например, для ресурса «книга»: id (integer, генерируется сервером), title (string, обязательное, 1–200 символов), authors (массив строк), isbn (string, уникальное), publication_year (integer, 4 цифры), available (boolean, по умолчанию true).

Схему рекомендуется документировать формально — с помощью JSON Schema или в составе спецификации OpenAPI. Это обеспечивает единое понимание формата всеми участниками: backend-разработчиками, frontend-командой, тестировщиками и внешними потребителями API.

Обязательные и опциональные поля разделяются явно. Для опциональных полей задаются значения по умолчанию. Правила валидации (минимальные и максимальные длины, диапазоны числовых значений, форматы строк) должны быть согласованы и проверяться как на клиенте, так и на сервере.


вопросы

Какой формат данных наиболее распространён в современных REST API для обмена информацией?

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

JSON

объясненія

JSON обеспечивает компактное представление структурированных данных и поддерживается нативно в JavaScript, Python, Java, Go и большинстве других языков. Это делает его де-факто стандартом для REST API.

ответыНеправильний

XML

ответыНеправильний

YAML

ответыНеправильний

CSV


вопросы

Какая спецификация позволяет формально описать структуру API: endpoints, схемы запросов и ответов, коды состояния?

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

OpenAPI

объясненія

OpenAPI (ранее Swagger) — стандарт описания REST API, позволяющий документировать контракт в машиночитаемом формате. На основе спецификации генерируются интерактивная документация, клиентские SDK и тесты.

ответыНеправильний

JSON Schema

ответыНеправильний

GraphQL SDL

ответыНеправильний

WSDL