При проектуванні інтерфейсу RESTful семантика типів запитів вважається життєво важливою для дизайну.
- GET - Список колекції або отримання елемента
- PUT - Замініть колекцію чи елемент
- POST - Створення колекції або елемента
- DELETE - Ну, ерм, видалити колекцію чи елемент
Однак, схоже, це не охоплює поняття "пошук".
Наприклад, при розробці набору веб-служб, які підтримують сайт пошуку роботи, можливо, ви будете мати такі вимоги:
- Отримати індивідуальну роботу
- GET для
domain/Job/{id}/
- GET для
- Створити рекламу роботи
- POST в
domain/Job/
- POST в
- Оновити оголошення про роботу
- ПУТ в
domain/Job/
- ПУТ в
- Видалити оголошення про роботу
- ВИДАЛИТИ до
domain/Job/
- ВИДАЛИТИ до
"Отримати всі робочі місця" також просто:
- GET для
domain/Jobs/
Однак як робота "пошуку" потрапляє до цієї структури?
Ви можете стверджувати, що він є варіантом "колекції списків" і реалізувати як:
- GET для
domain/Jobs/
Однак пошук може бути складним, і цілком можливо здійснити пошук, який генерує довгий рядок GET. Тобто, посилаючись на питання SO , тут виникають проблеми, що використовують рядки GET довше ніж 2000 символів.
Приклад може бути у гранітному пошуку - продовження прикладу "робота".
Я можу дозволити пошук по гранях - "Технологія", "Назва роботи", "Дисципліна", а також ключові слова з вільним текстом, вік роботи, місцезнаходження та зарплата.
Завдяки безперебійному користувальницькому інтерфейсу та великій кількості технологій та назв робочих місць цілком можливо, що пошук може охопити велику кількість варіантів.
Додайте цей приклад до резюме, а не до робочих місць, приводьте ще більше граней, і ви можете дуже легко уявити собі пошук зі вибраною сотнею граней, або навіть просто 40 граней, кожна з яких довжиною 50 символів (наприклад, титули роботи, назви університету, Імена роботодавця).
У цій ситуації може бути бажаним перемістити PUT або POST, щоб гарантувати правильне надсилання даних пошуку. Наприклад:
- POST в
domain/Jobs/
Але семантично це інструкція створити колекцію.
Ви могли б також сказати , що ви будете висловлювати це як створення пошуку:
- POST в
domain/Jobs/Search/
або (як це запропоновано спалювальною схемою нижче)
- POST в
domain/JobSearch/
Семантично це може здатися сенсом, але ви насправді нічого не створюєте, ви запитуєте дані.
Отже, семантично це GET , але GET не гарантовано підтримує те, що потрібно.
Отже, питання полягає в тому, щоб намагатися дотримати максимально вірний дизайн RESTful, домагаючись того, щоб я тримався в межах обмежень HTTP, що є найбільш підходящим дизайном для пошуку?
domain/Jobs?keyword={keyword}
. Це добре працює для мене :) Я сподіваюся, щоSEARCH
дієслово стане стандартним. programmers.stackexchange.com/questions/233158/…