OK, so già tutte le ragioni su carta perché dovrei non utilizzare un HTTP GET quando si effettua una chiamata RESTful per aggiornare lo stato di qualcosa sul server. In questo modo restituire dati possibilmente diversi ogni volta. E so che questo è sbagliato per il seguente 'sulla carta' ragioni:Perché si sta utilizzando un GET HTTP per aggiornare lo stato sul server in una chiamata RESTful errata?
- HTTP GET le chiamate devono essere idempotente
- N> 0 chiamate dovrebbe sempre avere gli stessi dati storici
- viola spec HTTP
- La chiamata HTTP GET è in genere di sola lettura
E sono sicuro che ci sono più motivi. Ma ho bisogno di un esempio semplice e concreto di giustificazione oltre a "Beh, questo viola le specifiche HTTP!". ... o almeno spero in uno. Ho anche già letto il seguito della quale sono più lungo le linee della lista di cui sopra: Does it violate the RESTful when I write stuff to the server on a GET call? & HTTP POST with URL query parameters -- good idea or not?
Per esempio, qualcuno può giustificare la sopra e perché è sbagliato/cattiva pratica/errato di utilizzare un HTTP GET voce con la seguente chiamata RESTful
"MyRESTService/GetCurrentRecords?UpdateRecordID=5&AddToTotalAmount=10"
So che è sbagliato, ma si spera che possa fornire un esempio per rispondere alla mia domanda originale. Quindi quanto sopra aggiornerebbe recordID = 5 con AddToTotalAmount = 10 e quindi restituirà i record aggiornati. So che un POST dovrebbe essere usato, ma diciamo che ho usato un GET.
Come esattamente e rispondere alla mia domanda fa o può questo causare un vero e proprio problema? Oltre a tutte le violazioni dalla lista puntata precedente, come utilizzare un GET HTTP per fare quanto sopra causa qualche problema reale? Troppe volte arrivo in uno scenario in cui posso giustificare le cose con "Perché il dottore ha detto così", ma ho bisogno di una giustificazione e di una comprensione migliore su questo.
Grazie!
Non causa problemi reali se si è soddisfatti del fatto che la query di aggiornamento può essere attivata nuovamente in qualsiasi momento (query cache, bot, ecc.). La mia conclusione è che se un ragazzo della mia squadra, conoscendo il problema perché ha letto le domande SO a cui ti sei collegato, usa GET per una query di aggiornamento, allora dovrei prendere in considerazione un'azione disciplinare. –
cosa diresti se qualcuno ha scritto un metodo chiamato GetSomething (id, value) in qualche API di terze parti e devi usarlo? –
È un po 'come chiedere perché una funzione chiamata "GetSomeResource" non può in effetti impostare la risorsa. Tecnicamente, puoi farlo ma poi buona fortuna mantenendo l'API e buona fortuna a chiunque debba usarlo. –