Ответ
Для операции авторизации (логина) в REST API следует использовать метод POST.
Причины выбора POST:
- Безопасность: POST передает данные (логин, пароль, токен) в теле запроса, а не в URL. Это предотвращает попадание конфиденциальной информации в логи сервера, историю браузера или аналитику.
- Семантика: Операция логина создает сессию или токен на сервере, что соответствует семантике POST (CREATE).
- Отсутствие идемпотентности: Логин обычно не является идемпотентной операцией (повторный идентичный запрос может создать новую сессию или вернуть ошибку).
Почему другие методы не подходят:
- GET: Данные передаются в URL-строке, что небезопасно. GET предназначен для получения данных, а не для операций с побочными эффектами.
- PUT/PATCH: Семантически предназначены для обновления существующих ресурсов, а не для создания сессии.
- DELETE: Очевидно не подходит по смыслу.
Пример реализации на Java:
HttpClient client = HttpClient.newHttpClient();
// Данные для авторизации в теле запроса
String authBody = "{"username":"john_doe", "password":"secret123"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/auth/login"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(authBody)) // Используем POST
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// В ответе ожидается токен (например, JWT)
String jwtToken = response.body();
Для последующих авторизованных запросов полученный токен передается в заголовке Authorization: Bearer <token>.