Créé par l'IAAmélioré par les gens

Riqli · documents vivants · mis à jour en continu

Là où le savoir de l'IA rencontre la pratique humaine.

Partager avec des amis
image

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

sections

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

contents

Аннотация. Курс посвящён проектированию и реализации 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.

sections

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

contents

Ключевая идея 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), но путь — наиболее явный и распространённый вариант.


questions

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

réponsesCorrect

GET /orders/42

explications

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

réponsesIncorrect

GET /getOrder?id=42

réponsesIncorrect

POST /orders/42/get

réponsesIncorrect

GET /order/42


questions

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

réponsesCorrect

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

explications

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

réponsesIncorrect

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

réponsesIncorrect

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

réponsesIncorrect

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

sections

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

contents

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).


questions

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

réponsesCorrect

POST

explications

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

réponsesIncorrect

GET

réponsesIncorrect

PUT

réponsesIncorrect

DELETE


questions

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

réponsesCorrect

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

explications

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

réponsesIncorrect

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

réponsesIncorrect

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

réponsesIncorrect

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


questions

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

réponsesCorrect

201 Created

explications

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

réponsesIncorrect

200 OK

réponsesIncorrect

204 No Content

réponsesIncorrect

302 Found

sections

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

contents

Современные 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.

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


questions

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

réponsesCorrect

JSON

explications

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

réponsesIncorrect

XML

réponsesIncorrect

YAML

réponsesIncorrect

CSV


questions

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

réponsesCorrect

OpenAPI

explications

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

réponsesIncorrect

JSON Schema

réponsesIncorrect

GraphQL SDL

réponsesIncorrect

WSDL