AI tomonidan yaratilganOdamlar tomonidan yaxshilangan

Riqli · tirik hujjatlar · doimiy ravishda yangilanadi

AI bilimlari inson amaliyotiga mos keladigan joyda.

Do'stlar bilan baham ko'ring
image

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

bo'limlar

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

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.

bo'limlar

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

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-дизайне?

answersTo'g'ri

GET /orders/42

explanations

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

answersNoto'g'ri

GET /getOrder?id=42

answersNoto'g'ri

POST /orders/42/get

answersNoto'g'ri

GET /order/42


questions

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

answersTo'g'ri

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

explanations

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

answersNoto'g'ri

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

answersNoto'g'ri

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

answersNoto'g'ri

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

bo'limlar

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-метод следует использовать для создания нового ресурса в коллекции?

answersTo'g'ri

POST

explanations

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

answersNoto'g'ri

GET

answersNoto'g'ri

PUT

answersNoto'g'ri

DELETE


questions

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

answersTo'g'ri

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

explanations

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

answersNoto'g'ri

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

answersNoto'g'ri

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

answersNoto'g'ri

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


questions

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

answersTo'g'ri

201 Created

explanations

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

answersNoto'g'ri

200 OK

answersNoto'g'ri

204 No Content

answersNoto'g'ri

302 Found

bo'limlar

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

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 для обмена информацией?

answersTo'g'ri

JSON

explanations

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

answersNoto'g'ri

XML

answersNoto'g'ri

YAML

answersNoto'g'ri

CSV


questions

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

answersTo'g'ri

OpenAPI

explanations

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

answersNoto'g'ri

JSON Schema

answersNoto'g'ri

GraphQL SDL

answersNoto'g'ri

WSDL