Из каких компонентов состоит контракт API между сервером и клиентом?

Ответ

Контракт API — это формальное соглашение, определяющее правила взаимодействия между клиентом и сервером. Он включает следующие ключевые компоненты:

Основные элементы API-контракта:

  1. Эндпоинты (URL-адреса) — пути к ресурсам (например, /api/users, /api/orders/{id})
  2. HTTP-методы — операции над ресурсами: GET, POST, PUT, PATCH, DELETE
  3. Параметры запроса — три типа:
    • Path parameters (/users/{id})
    • Query parameters (?page=1&limit=10)
    • Headers (Authorization: Bearer <token>)
  4. Тело запроса и ответа — формат данных (обычно JSON или XML) и их структура
  5. Коды состояния HTTP — 200 (OK), 201 (Created), 400 (Bad Request), 404 (Not Found), 500 (Internal Server Error)
  6. Схемы данных (модели) — точное определение структуры объектов, включая типы полей, обязательность и валидацию
  7. Аутентификация и авторизация — используемые механизмы: API-ключи, OAuth 2.0, JWT-токены
  8. Скоростные ограничения (Rate limiting) — правила ограничения количества запросов
  9. Ошибки и их формат — унифицированная структура сообщений об ошибках

Пример контракта в формате OpenAPI (Swagger):

openapi: 3.0.0
paths:
  /users/{userId}:
    get:
      summary: Получить пользователя по ID
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '404':
          description: Пользователь не найден

components:
  schemas:
    User:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
          example: 42
        name:
          type: string
          example: "Иван Иванов"
        email:
          type: string
          format: email

Практическое значение: Четкий контракт позволяет фронтенд- и бэкенд-разработчикам работать параллельно, автоматически генерировать клиентский код и документацию, а также создавать стабильные интеграционные тесты.

Ответ 18+ 🔞

Да ты послушай, что за дичь творят эти ваши айтишники! Сидят, блядь, и договариваются, как им друг с другом общаться, как будто на базаре не поделили что-то. А на деле-то — контракт API, сука! Это как устав в армии, только для серверов и клиентов. Нарушил — получи пизды в виде пятисотой ошибки.

Вот смотри, из чего эта бумажка состоит, чтобы не быть, прости господи, распиздяем:

Что там внутри, в этой хуйне:

  1. Эндпоинты (URL-адреса) — это типа адреса квартир, куда стучаться. /api/users — все жильцы, /api/orders/{id} — конкретный заказ, где {id} это номер квартиры, блядь.
  2. HTTP-методы — это что ты делать собрался в этой квартире. Пришёл GET — посмотреть, что внутри. POST — занести новый диван. PUT или PATCH — старый диван переставить. DELETE — диван нахуй выкинуть.
  3. Параметры запроса — а это ты с чем пришёл-то? Три вида:
    • Path parameters (/users/42) — номер в паспорте, прямо в адресе.
    • Query parameters (?page=1&limit=10) — как в магазине: «Дайте десяток, начиная с первой полки».
    • Headers (Authorization: Bearer <token>) — это типа пропуск на территорию, шепчешь на ухо охраннику.
  4. Тело запроса и ответа — суть разговора. Обычно на языке JSON, чтоб всем понятно было. «Хочу вот такой диван (JSON)» — «Получай, мудак, вот такой диван (тоже JSON)».
  5. Коды состояния HTTP — эмоции сервера. 200 — «всё пиздато, на». 201 — «диван занёс, молодец». 400 — «ты мне какую-то хуйню прислал, переделывай». 404 — «такой квартиры, идиот, нет». 500 — «у меня внутри всё ебнулось, иди погуляй».
  6. Схемы данных (модели) — чертёж дивана. Жёсткая инструкция: длина — число, цвет — строка, а isComfy — булевый, обязательный, ёпта! Без этого — не соберёшь.
  7. Аутентификация и авторизация — как докажешь, что ты не верблюд и имеешь право диван трогать. API-ключ, OAuth, JWT-токен — без этой бумажки ты хуй, а не клиент.
  8. Скоростные ограничения (Rate limiting) — чтоб не дрочил API без остановки. «Больше ста запросов в минуту — получи по ебалу и иди поспи».
  9. Ошибки и их формат — чтобы когда всё ебнулось, было понятно, ЧТО именно. Не просто «ошибка», а «Вася, у тебя в поле email вместо почты — ыфвафыва, иди исправляй, кретин».

Вот тебе пример, как это на их охуенном языке OpenAPI выглядит:

openapi: 3.0.0
paths:
  /users/{userId}:
    get:
      summary: Получить пользователя по ID
      parameters:
        - name: userId
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '404':
          description: Пользователь не найден

components:
  schemas:
    User:
      type: object
      required:
        - id
        - name
      properties:
        id:
          type: integer
          example: 42
        name:
          type: string
          example: "Иван Иванов"
        email:
          type: string
          format: email

А зачем этот цирк, спросишь? А затем, чувак, чтобы фронтендер, который кнопочки рисует, и бэкендер, который с базой данных ебется, могли работать отдельно и не орать друг на друга каждый день. По контракту можно даже код сгенерить автоматом и тесты написать. Короче, доверия ебать ноль, поэтому всё на бумаге, в рот меня чих-пых!