Что такое REST (RESTful API)?

«Что такое REST (RESTful API)?» — вопрос из категории Сети, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

REST (Representational State Transfer) — это архитектурный стиль для построения распределенных систем, в частности веб-сервисов (API). Он использует стандартные возможности протокола HTTP и следует набору ограничений и принципов.

Ключевые принципы REST:

  1. Единообразие интерфейса (Uniform Interface):
    • Ресурсы: Все сущности (пользователи, заказы) представляются как уникально идентифицируемые ресурсы (URI), например, /api/users/123.
    • Манипуляции через представления: Клиент взаимодействует с ресурсом, отправляя представление (обычно JSON или XML) через стандартные HTTP-методы.
    • Самодостаточные сообщения: Каждый запрос содержит всю информацию, необходимую для его обработки.
    • HATEOAS (Hypermedia as the Engine of Application State): Ответы сервера содержат гиперссылки на возможные следующие действия.
  2. Отсутствие состояния (Stateless): Сервер не хранит состояние клиента между запросами. Каждый запрос должен содержать всю необходимую аутентификационную и контекстную информацию (например, в заголовках).
  3. Кэшируемость (Cacheable): Ответы должны явно указывать, можно ли их кэшировать и как долго, чтобы уменьшить нагрузку на сервер.
  4. Клиент-серверная архитектура: Четкое разделение ответственности.
  5. Многоуровневая система (Layered System): Архитектура может состоять из нескольких уровней (балансировщик, сервер приложений, БД), что повышает масштабируемость.

Пример RESTful-запроса и ответа:

GET /api/books/45 HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer <token>
{
  "id": 45,
  "title": "Clean Code",
  "author": "Robert C. Martin",
  "_links": {
    "self": { "href": "/api/books/45" },
    "author": { "href": "/api/authors/12" }
  }
}

Стандартное соответствие HTTP-методов операциям (CRUD):

  • GET /api/books — получить список книг (Read).
  • POST /api/books — создать новую книгу (Create). Тело запроса содержит данные книги.
  • PUT /api/books/45 — полностью обновить книгу с id=45 (Update).
  • PATCH /api/books/45 — частично обновить книгу.
  • DELETE /api/books/45 — удалить книгу (Delete).

Использование кодов состояния HTTP:

  • 200 OK — успешный запрос.
  • 201 Created — ресурс создан.
  • 400 Bad Request — ошибка в запросе клиента.
  • 404 Not Found — ресурс не существует.
  • 500 Internal Server Error — ошибка на сервере.

REST доминирует как стандарт для публичных API благодаря своей простоте, использованию HTTP и хорошей поддержке инструментами.

Видео-ответы