Quando si progetta un'interfaccia RESTful, la semantica dei tipi di richiesta è considerata vitale per il progetto.
- OTTIENI : elenca la raccolta o recupera l'elemento
- PUT - Sostituisce la raccolta o l'elemento
- POST : crea una raccolta o un elemento
- ELIMINA - Bene, erm, elimina la raccolta o l'elemento
Tuttavia, questo non sembra coprire il concetto di "ricerca".
Ad esempio, nella progettazione di una suite di servizi Web che supportano un sito di ricerca di lavoro, potresti avere i seguenti requisiti:
- Ottieni annunci di lavoro individuali
- ARRIVARE a
domain/Job/{id}/
- ARRIVARE a
- Crea annuncio di lavoro
- POST a
domain/Job/
- POST a
- Aggiorna annuncio di lavoro
- MESSA a
domain/Job/
- MESSA a
- Elimina annuncio di lavoro
- ELIMINA a
domain/Job/
- ELIMINA a
"Ottieni tutti i lavori" è anche semplice:
- ARRIVARE a
domain/Jobs/
Tuttavia, in che modo la "ricerca" di lavoro rientra in questa struttura?
Si potrebbe affermare che è una variante di "raccolta lista" e mettere in atto come:
- ARRIVARE 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 che usano stringhe GET più lunghe di circa 2000 caratteri.
Un esempio potrebbe essere in una ricerca sfaccettata - continuando l'esempio "lavoro".
Potrei consentire la ricerca di aspetti: "Tecnologia", "Titolo professionale", "Disciplina", nonché parole chiave a testo libero, età del lavoro, luogo e stipendio.
Con un'interfaccia utente fluida e un gran numero di tecnologie e titoli di lavoro, è possibile che una ricerca comprenda un gran numero di scelte di sfaccettature.
Modifica questo esempio ai CV, piuttosto che ai lavori, porta ancora più sfaccettature e puoi facilmente immaginare una ricerca con un centinaio di sfaccettature selezionate o anche solo 40 sfaccettature ciascuna delle quali sono lunghe 50 caratteri (ad esempio, titoli di lavoro, nomi di università, Nomi dei datori di lavoro).
In tale situazione potrebbe essere desiderabile spostare un PUT o un POST per garantire che i dati di ricerca vengano inviati correttamente. Per esempio:
- POST a
domain/Jobs/
Ma semanticamente è un'istruzione per creare una collezione.
Si potrebbe anche dire che si esprime questo 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 GET non è garantito per supportare ciò di cui hai bisogno.
Quindi, la domanda è: cercare di mantenere il più fedele possibile alla progettazione RESTful, assicurandomi al contempo di rispettare i limiti di HTTP, qual è il design più appropriato per una ricerca?
domain/Jobs?keyword={keyword}
. Questo funziona bene per me :) La mia speranza è che ilSEARCH
verbo diventi uno standard. programmers.stackexchange.com/questions/233158/…