In teoria, non c'è nulla impedisce di invio di una richiesta corpo in una richiesta GET
. Il protocollo HTTP lo consente, ma non ha una semantica definita, quindi spetta a te documentare cosa esattamente succederà quando un client invia un payload GET
. Ad esempio, è necessario definire se i parametri in un corpo JSON sono equivalenti ai parametri Querystring o qualcos'altro interamente.
Tuttavia, poiché non esiste una semantica chiaramente definita, non si ha alcuna garanzia che le implementazioni tra la propria applicazione e il cliente la rispetteranno. Un server o un proxy potrebbe rifiutare l'intera richiesta o ignorare il corpo o qualsiasi altra cosa. Il modo REST per gestire implementazioni errate è aggirarlo in un modo che è disaccoppiato dalla tua applicazione, quindi direi che hai due opzioni che possono essere considerate best practice.
L'opzione semplice è utilizzare POST
anziché GET
come consigliato da altre risposte. Dal momento che POST
non è standardizzato da HTTP, dovrai documentare esattamente come dovrebbe funzionare. Questa è l'opzione meno valida, ma va bene.
L'opzione RESTful, che preferisco, è quella di implementare l'applicazione supponendo che il carico utile GET
non venga mai manomesso. Quindi, nel caso in cui qualcosa abbia un'implementazione rotta, si consente ai client di sovrascrivere il metodo HTTP con lo X-HTTP-Method-Override
, che è una convenzione popolare per i client per emulare i metodi HTTP con POST
. Quindi, se un client ha un'implementazione interrotta, può scrivere la richiesta GET
come POST
, inviando il metodo X-HTTP-Method-Override: GET
e si può avere un middleware che è disaccoppiato dall'implementazione dell'applicazione e riscrive il metodo di conseguenza. Questa è l'opzione migliore se sei un purista.
fonte
2015-04-11 04:35:05
Questa domanda viene posta su SO almeno una volta alla settimana. Sempre le stesse due opposizioni sono proposte come risposta: 1) sì, 'GET' con un corpo di richiesta è RESTful, 2) no, non lo è. Tutti noi non impariamo nulla di nuovo scrivendo le nostre opinioni più e più volte. Per ora, voto per chiudere questa domanda perché è un duplicato. Dovrebbe anche essere chiuso perché le risposte sono principalmente basate sull'opinione pubblica. –