Criado por IAMelhorado por pessoas

Riqli · documentos vivos · atualizados continuamente

Onde o conhecimento da IA encontra a prática humana.

Partilhar com amigos
image

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

secções

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

conteúdos

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

secções

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

conteúdos

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


perguntas

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

respostasCorreto

GET /orders/42

explicações

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

respostasErrado

GET /getOrder?id=42

respostasErrado

POST /orders/42/get

respostasErrado

GET /order/42


perguntas

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

respostasCorreto

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

explicações

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

respostasErrado

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

respostasErrado

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

respostasErrado

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

secções

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

conteúdos

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


perguntas

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

respostasCorreto

POST

explicações

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

respostasErrado

GET

respostasErrado

PUT

respostasErrado

DELETE


perguntas

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

respostasCorreto

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

explicações

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

respostasErrado

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

respostasErrado

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

respostasErrado

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


perguntas

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

respostasCorreto

201 Created

explicações

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

respostasErrado

200 OK

respostasErrado

204 No Content

respostasErrado

302 Found

secções

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

conteúdos

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

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


perguntas

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

respostasCorreto

JSON

explicações

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

respostasErrado

XML

respostasErrado

YAML

respostasErrado

CSV


perguntas

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

respostasCorreto

OpenAPI

explicações

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

respostasErrado

JSON Schema

respostasErrado

GraphQL SDL

respostasErrado

WSDL