Quando si progetta un'interfaccia RESTful, la semantica dei tipi di richiesta è ritenuta vitale per il design.
- OTTIENI - Elenca la raccolta o il recupero dell'elemento
- PUT - Sostituisci raccolta o elemento
- POST - Crea raccolta o elemento
- DELETE - Bene, erm, elimina la raccolta o l'elemento
Tuttavia, questo non sembra coprire il concetto di "ricerca".
es. nella progettazione di una suite di servizi Web che supportano un sito di ricerca di lavoro si potrebbero avere i seguenti requisiti:
- Trova un annuncio di lavoro individuale
-
OTTIENI a
domain/Job/{id}/
-
OTTIENI a
- Crea annuncio di lavoro
-
POST a
domain/Job/
-
POST a
- Annuncio del processo di aggiornamento
-
PUT a
domain/Job/
-
PUT a
- Elimina annuncio di lavoro
-
DELETE a
domain/Job/
-
DELETE a
Anche "Ottieni tutti i lavori":
-
OTTIENI a
domain/Jobs/
Tuttavia, in che modo il lavoro "cerca" rientra in questa struttura?
potresti sostenere che si tratta di una variazione di "raccolta di elenchi" e implementare come:
-
OTTIENI a
domain/Jobs/
Tuttavia, le ricerche possono essere complesse ed è del tutto possibile produrre una ricerca che genera una lunga stringa GET. Cioè, facendo riferimento a una domanda SO qui , ci sono problemi con le stringhe GET più lunghe di circa 2000 caratteri.
Un esempio potrebbe essere in una ricerca sfaccettata - continua l'esempio di "lavoro".
Posso consentire la ricerca su faccette: "Tecnologia", "Titolo lavoro", "Disciplina", nonché parole chiave a testo libero, età del lavoro, posizione e salario.
Con un'interfaccia utente fluida e un gran numero di tecnologie e titoli di lavoro, è possibile che una ricerca possa comprendere un gran numero di scelte di faccette.
Modificare questo esempio in CV, piuttosto che in lavori, aggiungere ancora più sfaccettature, e puoi facilmente immaginare una ricerca con cento facce selezionate, o anche solo 40 facce ognuna delle quali ha una lunghezza di 50 caratteri (ad es. Job Titles, Nomi universitari, nomi dei datori di lavoro).
In questa situazione potrebbe essere preferibile spostare un PUT o POST per garantire che i dati di ricerca vengano correttamente inviati. Per esempio:.
-
POST a
domain/Jobs/
Ma semanticamente è un'istruzione per creare una collezione.
Puoi potresti anche dire che lo esprimerai come la creazione di una ricerca:
-
POST a
domain/Jobs/Search/
o (come suggerito da burninggramma sotto)
-
POST a
domain/JobSearch/
Semanticamente può sembrare sensato, ma in realtà non stai creando nulla, stai facendo una richiesta di dati.
Quindi, semanticamente è un GET , ma non è garantito che GET supporti ciò di cui hai bisogno.
Quindi, la domanda è: cercare di mantenere il più fedele possibile al progetto RESTful, assicurandomi di mantenere i limiti di HTTP, qual è il design più appropriato per una ricerca?