Imeundwa na AIImeboreshwa na watu

Riqli · hati hai · zinasasishwa kila mara

Mahali maarifa ya AI yanakutana na mazoezi ya binadamu.

Shiriki na marafiki
image

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

sehemu

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

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.

sehemu

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

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

answersSahihi

GET /orders/42

explanations

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

answersSi sahihi

GET /getOrder?id=42

answersSi sahihi

POST /orders/42/get

answersSi sahihi

GET /order/42


questions

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

answersSahihi

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

explanations

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

answersSi sahihi

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

answersSi sahihi

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

answersSi sahihi

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

sehemu

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

answersSahihi

POST

explanations

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

answersSi sahihi

GET

answersSi sahihi

PUT

answersSi sahihi

DELETE


questions

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

answersSahihi

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

explanations

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

answersSi sahihi

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

answersSi sahihi

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

answersSi sahihi

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


questions

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

answersSahihi

201 Created

explanations

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

answersSi sahihi

200 OK

answersSi sahihi

204 No Content

answersSi sahihi

302 Found

sehemu

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

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

answersSahihi

JSON

explanations

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

answersSi sahihi

XML

answersSi sahihi

YAML

answersSi sahihi

CSV


questions

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

answersSahihi

OpenAPI

explanations

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

answersSi sahihi

JSON Schema

answersSi sahihi

GraphQL SDL

answersSi sahihi

WSDL