Обновлено: 25 марта 2026 г. в 01:00

API: RPC и REST

hard

Подходы к удалённым вызовам: особенности, различия и сценарии применения.

Выбор между RPC и REST редко про вкус; обычно он про форму контракта, эволюцию клиента и цену сетевого вызова.

Для реального проектирования глава помогает увидеть, как latency targets, формат интеграции, error contract, versioning и backward compatibility должны влиять на выбор подхода сильнее, чем общая мода на JSON или protobuf.

Для интервью и инженерных разборов она полезна тем, что помогает обсуждать удаленный вызов через partial failure handling, fallback, hedging и circuit breaker policy, а не только через синтаксис API.

Практическая польза главы

Практика проектирования

Выбирайте RPC/REST стиль под domain latency targets и формат интеграции.

Качество решений

Описывайте error contract, versioning и backward-compatibility как часть API-дизайна.

Interview articulation

Сравнивайте варианты через простоту клиента, observability и стоимость поддержки.

Failure framing

Планируйте partial failure handling: fallback, hedging и circuit-breaker policy.

Источник

Remote procedure call

Определение RPC и ключевые свойства.

Перейти на сайт

RPC, REST и gRPC — это разные подходы к удалённым вызовам. Они решают одну задачу: передать запрос через сеть и получить результат, но отличаются стилем интерфейса, уровнем формализации и типичными сценариями применения.

Источник

REST

Архитектурный стиль, основные ограничения и свойства.

Перейти на сайт

Визуализация работы подходов

Выберите подход и посмотрите, как формируется запрос, ответ и контракт между сторонами.

Как работают удалённые вызовы

Выберите подход, чтобы увидеть, как строится запрос и ответ

Запрос и ответ

Клиент
call getUser(id)
Сервер
Клиент
User
Сервер

Ключевые свойства

  • Прозрачность вызова процедуры
  • Фокус на методах, а не ресурсах
  • Чаще всего бинарная сериализация

Что важно помнить

Клиент вызывает метод как локальный
Запрос и ответ похожи на функции
Обычно request-response
Все три подхода опираются на клиент-серверный обмен и сериализацию данных.

Источник

gRPC basics

Сервисы, proto-контракты и типы RPC вызовов.

Перейти на сайт

Что у них общего

  • Работают по модели клиент-сервер и передают запросы по сети.
  • Используют сериализацию данных и контракт между клиентом и сервером.
  • Требуют описания ошибок, таймаутов и ретраев.

Чем отличаются

RPC

  • Фокус на вызове метода, как локальной функции.
  • Удобно для внутренних сервисов и бинарных протоколов.
  • Часто сильнее связаны клиент и сервер.

REST

  • Фокус на ресурсах и HTTP методах.
  • Статeless и хорошо кэшируется.
  • Лучше для публичных API и интеграций.

gRPC

  • Контракт описывается в .proto и генерирует код.
  • Поддерживает streaming вызовы.
  • Хорошо подходит для микросервисов.

Стандарт

OpenAPI Specification

Официальный формат описания REST-контракта: endpoints, схемы данных, ошибки и security.

Перейти на сайт

OpenAPI как контракт в REST

Зачем нужен OpenAPI

  • Фиксирует контракт API в машиночитаемом виде, а не в «живой документации на словах».
  • Позволяет генерировать SDK/клиенты, документацию и заглушки для тестирования.
  • Упрощает контроль breaking changes через diff и contract checks в CI.
  • Снижает рассинхрон между backend, frontend и интеграторами.

Что описываем в контракте

  • Пути и методы (`/users`, `GET/POST`), параметры, форматы payload.
  • Схемы запросов/ответов, обязательные поля и ограничения валидации.
  • Ошибки (`4xx/5xx`) и единый формат error response.
  • Security-схемы (JWT, API key, OAuth2) и требования к авторизации.

Пример (упрощённо)

openapi: 3.1.0
paths:
  /users/{id}:
    get:
      responses:
        "200":
          description: User profile
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
components:
  schemas:
    User:
      type: object
      required: [id, email]
      properties:
        id: { type: string }
        email: { type: string, format: email }

Когда что выбирать

  • RPC удобен для внутренних сервисов, где важна скорость и компактные контракты.
  • REST подходит для публичных API и интеграций, где важны кэширование и совместимость.
  • gRPC хорош для микросервисов, когда нужен строгий контракт и streaming.

Связанные главы

  • HTTP протокол - как REST и gRPC-over-HTTP/2 реализуются на прикладном уровне и какие накладные расходы они несут.
  • TCP протокол - транспортная база для надёжных RPC/REST вызовов: handshake, retransmit, flow/congestion control.
  • UDP протокол - контрастный transport-подход для latency-critical сценариев без встроенной гарантии доставки.
  • Паттерны межсервисной коммуникации - системный выбор между sync/async взаимодействием, retries и backpressure на уровне сервисов.
  • Service Discovery - как клиенты находят живые endpoint-ы сервисов при динамическом масштабировании и failover.
  • API Gateway - протокол-трансляция, auth, rate limiting и единая точка входа для внешних и внутренних клиентов.
  • API Design Patterns (short summary) - контрактные паттерны API и эволюция изменений без поломки интеграций.
  • Зачем нужны распределённые системы и консистентность - переход от выбора протокола к системным компромиссам latency, availability и consistency.

Чтобы отмечать прохождение, включи трекинг в Настройки