Podczas projektowania interfejsu RESTful semantykę typów żądań uważa się za kluczową dla projektu.
- GET - Wyświetl listę elementów do pobrania lub pobierania
- PUT - zamień kolekcję lub element
- POST - Utwórz kolekcję lub element
- USUŃ - No cóż, usuń kolekcję lub element
Nie wydaje się to jednak obejmować pojęcia „wyszukiwania”.
Na przykład przy projektowaniu pakietu usług internetowych, które obsługują witrynę Job Search, możesz mieć następujące wymagania:
- Uzyskaj indywidualną ofertę pracy
- GET do
domain/Job/{id}/
- GET do
- Utwórz ogłoszenie o pracę
- POST do
domain/Job/
- POST do
- Zaktualizuj ogłoszenie o pracę
- PUT do
domain/Job/
- PUT do
- Usuń ogłoszenie o pracę
- USUŃ do
domain/Job/
- USUŃ do
„Zdobądź wszystkie prace” jest również proste:
- GET do
domain/Jobs/
Jednak w jaki sposób „wyszukiwanie” pracy mieści się w tej strukturze?
Państwo mogłoby twierdzą, że jest to odmiana „lista kolekcji” i wdrożyć jako:
- GET do
domain/Jobs/
Jednak wyszukiwania mogą być złożone i całkowicie możliwe jest utworzenie wyszukiwania, które generuje długi ciąg GET. Oznacza to, że odwołując się tutaj do pytania SO , występują problemy z ciągami GET dłuższymi niż około 2000 znaków.
Przykładem może być wyszukiwanie fasetowe - kontynuacja przykładu „praca”.
Mogę zezwolić na wyszukiwanie w aspektach - „Technologia”, „Stanowisko”, „Dyscyplina”, a także tekstowe słowa kluczowe, wiek pracy, lokalizacja i wynagrodzenie.
Dzięki płynnemu interfejsowi użytkownika oraz dużej liczbie technologii i tytułów pracy możliwe jest, że wyszukiwanie może obejmować wiele różnych aspektów.
Ulepsz ten przykład w CV, a nie w zadaniach, przynoszą jeszcze więcej aspektów, a możesz bardzo łatwo wyobrazić sobie wyszukiwanie z wybranymi setkami aspektów lub nawet tylko 40 aspektami, z których każdy ma długość 50 znaków (np. Tytuły pracy, nazwy uniwersytetów, Nazwy pracodawców).
W takiej sytuacji pożądane może być przeniesienie PUT lub POST, aby upewnić się, że dane wyszukiwania zostaną poprawnie wysłane. Na przykład:
- POST do
domain/Jobs/
Ale semantycznie jest to instrukcja tworzenia kolekcji.
Państwo mogli również powiedzieć, musisz wyrazić to jak stworzenia wyszukiwania:
- POST do
domain/Jobs/Search/
lub (zgodnie z sugestią Burngramma poniżej)
- POST do
domain/JobSearch/
Semantycznie może się to wydawać sensowne, ale tak naprawdę nic nie tworzysz, tylko żądasz danych.
Więc semantycznie jest to GET , ale nie ma gwarancji , że GET będzie obsługiwał to, czego potrzebujesz.
Tak więc pytanie brzmi - starając się zachować jak najbardziej wierny projektowi RESTful, jednocześnie upewniając się, że trzymam się ograniczeń HTTP, jaki jest najbardziej odpowiedni projekt do wyszukiwania?
domain/Jobs?keyword={keyword}
. To działa dobrze dla mnie :) Mam nadzieję, żeSEARCH
czasownik stanie się standardem. programmers.stackexchange.com/questions/233158/…