Пам'ятайте, що з API REST це все питання вашої точки зору.
Два ключових поняття в API REST - це кінцеві точки та ресурси (сутності). Вільно кажучи, кінцева точка або повертає ресурси через GET, або приймає ресурси через POST та PUT тощо (або комбінацію вищезазначеного).
Прийнято, що за допомогою POST, надіслані вами дані можуть або не можуть призвести до створення нового ресурсу та пов’язаних з ним кінцевих точок (ів), які, швидше за все, не "живуть" за URL-адресою POSTed. Іншими словами, коли ви відправляєте пошту, ви надсилаєте дані кудись для обробки. Кінцева точка POST - це не місце, де зазвичай можна знайти ресурс.
Цитуючи з RFC 2616 (при цьому відсутні релевантні частини та виділені відповідні частини):
9.5 ПОСТ
Метод POST використовується для запиту, щоб сервер-джерело прийняв сутність, включену в запит, як новий підлеглий ресурс, ідентифікований URI-запитом у рядку запиту. POST розроблений таким чином, щоб дозволити єдиний метод охопити наступні функції:
- ...
- Надання блоку даних, таких як результат подання форми, до процесу обробки даних;
- ...
...
Дія, виконана методом POST, може не призвести до ресурсу, який можна ідентифікувати за допомогою URI . У цьому випадку або 200 (ОК), або 204 (Без вмісту) є відповідним статусом відповіді, залежно від того, включена у відповідь суб'єкт, який описує результат .
Якщо ресурс створений на початковому сервері, відповідь ДОЛЖЕН би бути 201 (Створено) ...
Ми звикли до кінцевих точок та ресурсів, що представляють "речі" чи "дані", будь то користувач, повідомлення, книга - все, що диктує проблемний домен. Однак кінцева точка може також відкрити інший ресурс - наприклад результати пошуку.
Розглянемо наступний приклад:
GET /books?author=AUTHOR
POST /books
PUT /books/ID
DELETE /books/ID
Це типовий REST CRUD. Однак що робити, якщо ми додали:
POST /books/search
{
"keywords": "...",
"yearRange": {"from": 1945, "to": 2003},
"genre": "..."
}
У цій кінцевій точці немає нічого нерестинного. Він приймає дані (сутність) у формі органу запиту. Ці дані є критеріями пошуку - DTO, як і будь-який інший. Ця кінцева точка виробляє ресурс (сутність) у відповідь на запит: Результати пошуку . Ресурс результатів пошуку є тимчасовим, який подається негайно клієнту, без перенаправлення та без впливу інших канонічних URL-адрес.
Це все ще REST, за винятком об'єктів, які не є книгами - суб'єктом запиту є критерії пошуку книг, а суб'єктом відповіді є результати пошуку книг.