Что означает принцип Stateless в REST API?

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

Ответ

Stateless (без состояния) — это ключевое ограничение архитектуры REST, означающее, что сервер не хранит состояние клиента (сессии, контекст) между запросами. Каждый HTTP-запрос должен содержать всю информацию, необходимую для его обработки (аутентификация, параметры, данные).

Почему это важно:

  • Масштабируемость: Серверы можно добавлять/удалять без необходимости синхронизации состояния между ними.
  • Надежность: Отказ одного сервера не ломает пользовательскую сессию.
  • Упрощение: Серверный код становится проще, так как не требуется управление сессиями.

Пример на Java (JAX-RS):

@GET
@Path("/users/{id}")
public Response getUser(@PathParam("id") Long userId,
                       @HeaderParam("Authorization") String authToken) {
    // Каждый запрос обязан предоставить токен.
    // Сервер проверяет его валидность, но не хранит факт "входа" пользователя.
    User user = userService.findUser(userId, authToken);
    return Response.ok(user).build();
}

Недостаток: Клиент вынужден передавать больше данных в каждом запросе (например, токен в заголовках).