2012-06-18 26 views

risposta

25

Come regola generale, l'idea di un GET in REST è che tutti i parametri vengono inviati nell'URL. Come indica la risposta alla domanda che hai incluso, è fattibile ma manca il punto di REST, che è quello di avere un'interfaccia webbish coerente. Se si desidera passare dati complessi al proprio endpoint, è probabile che si desideri utilizzare un POST, per il quale gli utenti si aspettano di avere un corpo. Consiglio vivamente di riconsiderare questa implementazione.

Ma per la tua domanda attuale, certo ci sono clienti che non possono inviare un corpo su un GET. Per lo più immagino che i tuoi clienti siano programmatici, per esempio urlib2 di python, e mentre tu puoi impostare un corpo su GET, non è proprio l'uso previsto del modulo, quindi stai costringendo il programmatore a diventare strano. Ancora più importante, l'idea dell'API REST è quella di essere indipendente dal client, motivo per cui mi sembra che la progettazione dell'API debba essere rielaborata qui.

+1

Sì, questo sarebbe la mia seconda scelta. È vero che l'utilizzo di un corpo su una richiesta GET non è completamente riposante, ma è necessario. La lunghezza dell'URL è limitata e ha spesso problemi con i dati complessi. Se non ci sono possibilità per GET, userò il POST, ma gli utenti cercheranno POST per la creazione e GET per il recupero dei dati. Tuttavia, non vedo altra opzione. – user437899

+5

Vedo il punto, ma penso che agli utenti sembrerà meno mutante immaginare l'endpoint POST come fornitore di servizi che sta elaborando i loro dati XML/JSON complessi e rispondendo con il risultato, piuttosto che creare un non standard Richiedi Il POST è usato frequentemente in questo modo, GET no. – Ben

9

È una cattiva idea utilizzare body nelle richieste HTTP GET. Sì, sembra che l'HTTP GET "de jure" possa avere un corpo, ma "di fatto" si avranno problemi:

  1. Con framework/librerie client. Sarà difficile trovarne il supporto.
  2. Il server può semplicemente ignorare il corpo della richiesta GET. E comunque non è un modo standard, e potrebbe essere un problema con il server o con la sua configurazione.
  3. Fa in modo che il codice, specialmente sul lato server, non sia chiaro agli altri, perché nessuno si aspetterà di ottenere GET con il corpo.

Stai cercando un modo difficile? Con GET con il corpo avrai tante insidie. Perché non usare altro verbo HTTP?

Per esempio l'uso POST (o alcuni altri verbi), di:

  1. è facile avere libreria client già pronto,
  2. nessun problema con il server o la configurazione del server,
  3. E 'chiaro per altri

non cercano modi più duri :)

+0

Puoi giustificare "E comunque non è un modo standard", pls. A quale "standard" ti riferisci? –

+1

Mi riferisco agli standard HTTP e ai documenti RFC, ad es. http://tools.ietf.org/html/rfc2616. Le richieste HTTP GET con body non sono standard – Regfor

+2

Bene, HTTP 1.1 sembra consentire il message-body per le richieste GET (non proibendole): 'Un messaggio-body NON DEVE essere incluso in una richiesta se la specifica del metodo di richiesta (sezione 5.1.1) non consente l'invio di un'entità-corpo nelle richieste. La specifica GET in 5.1.1 non sembra "non consentire". –