2013-08-13 4 views
10

I miei utenti inseriscono alcuni campi di informazione in un'app per iOS. Queste informazioni devono essere convalidate sul mio server, che ha un'API RESTful. Dopo la convalida l'interfaccia utente dell'app iOS cambia per indicare il risultato.Quale operazione di REST (GET, PUT o POST) per la convalida delle informazioni?

Né GET, PUT o POST sembrano essere appropriati, perché non sto ottenendo una risorsa, e nemmeno una risorsa è stata creata o aggiornata.

Qual è l'operazione REST migliore per l'implementazione di questa convalida?

+2

Ho dovuto davvero pensare a questo. Ottima domanda +1 – Kristian

risposta

6

I miei utenti entrano campi alcune informazioni in iOS. Questa informazione deve essere convalidata sul mio server, che ha un'API RESTful. Dopo la convalida , l'interfaccia utente dell'app iOS cambia per indicare il risultato .... Sono che non ottiene una risorsa e nessuna delle due è una risorsa creata o aggiornata.

Poiché non si sta salvando nulla (non modificando alcuna risorsa), penso che questo sia tecnicamente più RPC di RESTful per me.

Quello che segue è la mia opinione, in modo da non prendere come vangelo:

Se l'informazione è semplicemente essere presentata e il gioco è dire sì o no, e non sei salvandolo , Direi che POST va bene ..

Se le informazioni venivano effettivamente salvate/aggiornate, scegliere il metodo HTTP corretto sarebbe molto più rilevante.

POST = CREATE/SUBMIT (in an RPC context) 
PUT = UPDATE (or CREATE if there is nothing to UPDATE) 
+0

Grazie per la risposta! Effettivamente odori lik RPC. Anche l'URL termina in '/ check' al momento. Ma ovviamente non voglio mixare in un SOAP RPC o qualcosa del genere ;-) –

+0

[This] (http://stackoverflow.com/a/12100416/1971013) e altri post ;-) conferma quello che dici. Il problema sembra essere che non esiste una risposta teorica chiara, e che è una cosa pratica/interpretativa. –

+1

grazie per aver seguito questo link utile. in bocca al lupo. PS, dai un'occhiata a Apigee.com, fanno discussioni API e how-to ... una volta hanno parlato della buona struttura dell'API, e hanno preso nota che puoi * includere * metodi in stile RPC che decorano percorsi esistenti ... cioè RESTFUL metodo normale: '/ resource (/: id)' e RESTFUL decorati con RPC: '/ resource/check' che accetta i parametri che stai convalidando/controllando – Kristian

4

Io uso lo stesso scenario come te e uso PUT per questo. Devi chiedertelo: "quando invio la stessa richiesta due volte, questo fa uno stato diverso sul server?" Se sì, usa POST, se non usi PUT.

+0

'PUT' contro quale URI? –

+0

per esempio **/Login ** (Non importa quante volte si accede, il server rimane sempre lo stesso) –

1

mi consiglia di utilizzare un ValidationResource e due richieste. Ogni istanza di questa risorsa rappresenta la convalida di un insieme di dati. Il flusso di lavoro:

1. Creare nuova ValidationResource

  • Richiesta:POST /path/to/validations
    • dati per convalidare come il corpo
  • Risposta:201 Created
    • Location: /path/to/validations/<unique-id-of-this-validation>

2.Look up risultato

  • Richiesta:GET /path/to/validations/<unique-id-of-this-validation>
  • Respons:200 OK
    • corpo: {'valid': true} o {'valid': false}

Questo è un approccio RESTful in cui la convalida è una risorsa con stato del server.