Каковы ключевые преимущества и недостатки архитектурного стиля REST?

«Каковы ключевые преимущества и недостатки архитектурного стиля REST?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Преимущества REST (Representational State Transfer):

  • Простота и универсальность: Основан на стандартах HTTP (методы GET, POST, PUT, PATCH, DELETE, статус-коды).
  • Stateless (бессостояние): Каждый запрос содержит всю необходимую информацию, что упрощает масштабирование и отказоустойчивость.
  • Кэшируемость: Ответы могут быть помечены как кэшируемые, что значительно повышает производительность.
  • Единообразие интерфейса (Uniform Interface): Ресурсы идентифицируются URI, а манипуляции осуществляются через представления (JSON/XML).
  • Широкая поддержка: Инструменты и клиенты есть для всех языков и платформ.

Недостатки и ограничения:

  • Over-fetching / Under-fetching: Клиент может получить избыточные данные или вынужден делать несколько запросов для сбора нужной информации. Эту проблему решает GraphQL.
  • Отсутствие строгого контракта: Нет официальной спецификации для описания API (как в SOAP WSDL). Решается использованием OpenAPI/Swagger.
  • Сложность с операциями, не вписывающимися в CRUD: Например, сложные вычисления или действия, не относящиеся к ресурсу.
  • Нет встроенной поддержки реального времени: Для этого требуются дополнительные технологии (WebSockets, Server-Sent Events).

Пример корректного RESTful дизайна:

GET    /api/users          # Получить список пользователей
POST   /api/users          # Создать нового пользователя
GET    /api/users/{id}     # Получить пользователя по ID
PUT    /api/users/{id}     # Полностью обновить пользователя
PATCH  /api/users/{id}     # Частично обновить пользователя
DELETE /api/users/{id}     # Удалить пользователя