Перейти к основному содержимому

HTTP. Краткие советы по использованию протокола

Основные рекомендации

  • URL идентифицирует ресурс. Вызов метода — не ресурс.

    • Неправильно:
      GET /?method=шарахнуть&to=Луна
    • Правильно:
      POST /шарахалка/?to=Луна
  • URL состоит из схемы, хоста, пути, запроса и фрагмента.

    • Путь используется для иерархических ресурсов.
    • Запрос — для неиерархических и параметров операции.
    • Фрагмент — для подчинённых ресурсов без URL.
    • Пример:
      http://nyashnye-kotiki.xxx/breeds/maine-coon/?deliver_to=Moscow#photo
  • Обращение по HTTP — это применение метода (глагола) к URL.

    • Результат должен соответствовать глаголу:
      • GET возвращает ресурс.
      • DELETE удаляет ресурс.

Особенности методов

  • Безопасные методы:

    • GET, HEAD, OPTIONS не изменяют состояние ресурса.
    • Их могут вызывать сетевые агенты без вашего согласия.
  • Кэширование:

    • GET и HEAD кэшируются по умолчанию.
    • Остальные методы — нет.
  • Идемпотентность:

    • GET, PUT, DELETE возвращают одинаковый результат при повторных вызовах.
    • Пример:
      • PUT кладёт ресурс по URL.
      • GET возвращает ресурс.
      • DELETE удаляет ресурс.
  • Использование POST:

    • Применяется, если нет URL для операции.
    • Пример:
      POST /threads/php-rulezz/messages
    • Повторный POST создаёт дубликат, а PUT можно повторять без изменений результата.
  • Разница между PUT и PATCH:

    • PUT обновляет или создаёт ресурс целиком.
    • PATCH изменяет ресурс частично.

Коды ответа

  • Назначение кодов:

    • 3xx — требуется дополнительное действие.
    • 4xx — ошибка клиента (желательно уточнять причину).
    • 5xx — ошибка на стороне сервера.
  • Типичные ответы:

    • GET200 OK
    • PUT201 Created (если ресурс создан) или 200 OK (если обновлён)
    • DELETE204 No Content
    • POST200 OK или 201 Created (с указанием URL нового ресурса в заголовке Location)
  • Особенности статусов:

    • 401 Unauthorized используется только с заголовком WWW-Authenticate.
    • 403 Forbidden применяется для других случаев.
    • 304 Not Modified сигнализирует, что ресурс нужно взять из кэша.
    • 404 Not Found можно повторять, так как ресурс может появиться позже.
    • 410 Gone используется для ресурсов, которые удалены навсегда.

Подборка материалов по теме

  1. 15 тривиальных фактов о правильной работе с протоколом HTTP — Хабр, Яндекс
  2. REST API Best Practices — Хабр
  3. Best Practices in API Design — блог Swagger