Веб-сервисы

Веб-сервис предоставляет машинный интерфейс по сети. HTTP часто используется как транспорт, но сам по себе не определяет стиль контракта: поверх него могут работать REST API, SOAP, RPC и event streaming.

Контракт

Хороший контракт отвечает на вопросы:

  • какой endpoint и метод вызвать;
  • какая схема request/response;
  • какие статусы и ошибки возможны;
  • как передаётся аутентификация;
  • что можно безопасно повторить;
  • как меняются версии.
sequenceDiagram
    participant C as Client
    participant S as Service
    C->>S: request + correlation id
    alt success
        S-->>C: 2xx + representation
    else client error
        S-->>C: 4xx + structured problem
    else temporary failure
        S-->>C: 5xx / timeout
    end

REST, SOAP и RPC

ПодходЦентр моделиСильная сторонаЦена
REST-like HTTPресурсы и HTTP semanticsпонятность инфраструктуре, cachingдисциплина URI и методов
SOAPформальный XML envelope и контрактзрелые enterprise-стандартысложность и объём
RPCвызываемая операцияестественная модель командтранспортные детали могут стать невидимыми

Ни один стиль автоматически не обеспечивает надёжность. Timeouts, retries, idempotency, versioning и observability проектируются отдельно.

Синхронное взаимодействие

У синхронного запроса клиент ждёт ответ и разделяет failure window сервера. Нужны:

  • connect/read/total timeout;
  • ограниченный retry только для подходящих ошибок и операций;
  • jitter, чтобы клиенты не повторяли одновременно;
  • circuit breaker при повторяющихся сбоях;
  • correlation id и метрики latency/error rate.

Асинхронная операция

Долгую работу можно представить ресурсом операции:

POST /reports          -> 202 + /operations/abc
GET  /operations/abc   -> status=RUNNING
GET  /operations/abc   -> status=COMPLETED, result=...

Это явнее, чем держать HTTP connection до завершения.

Типичные сбои

  • Клиент повторяет POST после timeout и создаёт дубликат.
  • API возвращает stack trace и внутреннюю модель данных.
  • Timeout клиента длиннее всего допустимого пользовательского бюджета.
  • Версия сервера выкатывается раньше совместимого клиента.
  • Один экран делает десятки последовательных запросов. См. Кейс сетевой N plus 1.

Вопросы для собеседования

Является ли любой HTTP API REST? Нет; HTTP может транспортировать RPC, SOAP и другие модели.

Что входит в контракт кроме JSON-схемы? Methods, URI, statuses, errors, auth, повторяемость и правила versioning.

Почему timeout обязателен? Без него зависший downstream удерживает threads/connections неопределённо долго.

Когда удобен асинхронный endpoint? Когда операция дольше разумного request timeout или требует отдельного прогресса.

См. REST, Веб протоколы, Микросервисная архитектура.