Non Delicious richieste GET utilizzo per la creazione, invece di POST, e perché non dovrei fare lo stesso?

StackOverflow https://stackoverflow.com/questions/8802795

  •  25-10-2019
  •  | 
  •  

Domanda

Sto guardando la Delicious API e vedere il seguente è l'operazione di creare un nuovo segnalibro:

https://api.del.icio.us/v1/posts/add?&url={URL}&description={description}

Sembra che si sta utilizzando una richiesta GET per creare voci del database server-side, che ho letto altrove non dovrebbe essere fatto con le richieste GET, solo con richieste POST.

Sto scrivendo il mio API in questo momento e penso che è favoloso per consentire agli utenti di interagire con le API direttamente dal URL. Ma non si può fare questo a meno che non si consente operazioni CRUD su GET.

Quindi, è delizioso davvero facendo operazioni CRUD su GET? C'è un motivo importante che non dovrei fare la stessa cosa nel mio API, o si POST solo mandato per le operazioni CRUD per evitare accidentali invocazione?

È stato utile?

Soluzione

invocazione accidentale è parte di esso; Questo è ciò che i mezzi HTTP spec quando si parla di metodi "idempotenti". Ma si potrebbe sostenere che ciò che sta facendo Delicious è in realtà idempotente fintanto che l'URL viene aggiunto solo una volta, non importa quante volte si ottiene. Ma ancora più importante è che GET è href="http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-18#section-6.1.1" :

The important distinction here is that the user
did not request the side-effects, so therefore
cannot be held accountable for them.

Dal punto di vista di design di interfaccia, è volete user-agent per fare POST e PUT e DELETE più difficile che GET, o almeno è nettamente diverso, in modo che gli utenti possono fare affidamento su tale differenza accennare quando le loro azioni potrebbero causare un cambiamento dello stato delle risorse, perché sono responsabile di tali modifiche. Utilizzando GET a cambiamenti rendono, anche se idempotente, sfocature quella linea di responsabilità, soprattutto quando prefetcher sono ampiamente utilizzate.

Altri suggerimenti

Dipende se si seguono i principi REST GET per cambiare le cose è vietato. Pertanto la maggior parte delle persone dicono con il riposo uso post per le modifiche.

Tuttavia c'è una differenza tra GET e POST. Secondo le richieste RFC GET avere sempre una risposta follow-up. E se si utilizza POST è necessario seguire il modello Redirect-Dopo-Post.

Un'altra limitazione è che gli URL possono avere una dimensione limitata. Così ottenere funzionerà solo fino a quando i dati in ingresso è abbastanza breve. Così la deliziosa API ci deve un bug. Non sarà in grado di aggiungere ogni possibile url tramite un parametro GET.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top