2012-02-06 18 views

risposta

78

L'URL indica la risorsa stessa. Un "cliente" è una risorsa su cui si può agire, quindi dovrebbe essere parte dell'URL di base: /orders/view/client/23.

I parametri sono proprio questo, per parametrizzare l'accesso alla risorsa. Questo in particolare entra in gioco con post e ricerche: /orders/find?q=blahblah&sort=foo. C'è una linea sottile tra parametri e sotto-risorse: /orders/view/client/23/active versus /orders/view/client/23?show=active. Raccomando lo stile di sotto-risorsa e i parametri di riserva per le ricerche.

Poiché ciascun endpoint rappresenta un trasferimento di stato (per manipolare il mnemonico), le intestazioni personalizzate devono essere utilizzate solo per elementi che non implicano il nome della risorsa (l'URL), lo stato della risorsa (il corpo) , o parametri che influenzano direttamente la risorsa (parametri). Ciò lascia veri metadati sulla richiesta di intestazioni personalizzate.

HTTP ha una vasta gamma di intestazioni che coprono la maggior parte di tutto ciò che ti servirà. Dove ho visto intestazioni personalizzate venire in un sistema di richiesta di sistema che operano per conto di un utente. Il sistema proxy convaliderà l'utente e aggiungerà "X-User: userid" alle intestazioni e utilizzerà le credenziali di sistema per raggiungere l'endpoint. Il sistema di ricezione convalida che le credenziali di sistema sono autorizzate ad agire per conto dell'utente, quindi convalida che l'utente è autorizzato a eseguire l'azione.

+0

Grazie per una risposta così completa! Useresti ancora l'X-User per un'API mobile in cui il rischio di avere un proxy malvagio (che toglie l'intestazione) è ancora alto? –

+1

No, l'uso di X-User che ho citato è nelle connessioni di sistema a sistema in cui il sistema sta agendo per conto di una terza parte. Ad esempio, l'utente U comunica con il server A. Il server A presenta le credenziali al server B con un'intestazione X-User per indicare "Utilizza le mie credenziali per verificare che sia autorizzato a eseguire questa azione per conto dell'Utente U." Questo avviene in architetture orientate ai servizi, e di solito stai usando HTTPS. Una piattaforma mobile dovrebbe quasi sempre essere l'utente stesso a recitare e utilizzare le credenziali in prima persona appropriate per la transazione. – Nialscorva

+4

Il terzo paragrafo è una delle risposte più istruttive che ho letto su SO ;-) – Alistair77

2

Non esiste uno standard per il riposo ma il modo accettato sarebbe

GET /orders/view/23 
Non

usin g le intestazioni personalizzate e quindi il 23 dopo la vista assume l'id, quindi avresti una funzione che prende l'id e quindi produce solo quell'informazione.

3

Non utilizzare intestazioni personalizzate in quanto non si sa se i proxy passeranno. L'URL basato è la strada da percorrere.

GET/ordini/view/client/23

+1

Non consiglierei nemmeno intestazioni personalizzate, ma i proxy danneggiati non sono la ragione. Il proxy è rotto dovrebbe essere risolto. –

1

Sicuramente OK:

GET /orders/view/client_id/23 or 
GET /orders/view/?client_id=23 

anche OK:

GET /orders/view/23 or 

vorrei che questo sarebbe OK, troppo :

POST /orders/view 
(custom HTTP header) CLIENT_ID: 23 
+0

La risposta POST REST-ful dovrebbe essere un HTTP 303 con l'intestazione Location impostata su qualcosa come "/ orders/view/23". –

5

Vorrei utilizzare solo un'intestazione personalizzata quando non c'è altro modo per passare le informazioni per standard o convenzione. Darren102 sta spiegando il modo tipico per passare quel valore. La tua Api sarà molto più amichevole usando i tipici pattern versi usando intestazioni personalizzate. Questo non vuol dire che non avrai un caso per usarli, solo che dovrebbero essere l'ultima risorsa e qualcosa che non sia già gestito dalla specifica HTTP.

+0

Completamente d'accordo ... non reinventare mai la ruota se esiste un modo standard per eseguire un compito. –

3

Quando si utilizzano ... le intestazioni HTTP nella parte richiesta di un'API REST?

Autenticazione: GUID, l'autenticazione di base, token personalizzati, ecc esempio, Basic Authentication with a Guid token for REST api instead of username/password

Se sei stato coinvolto nel passaggio gettoni o altre informazioni di autenticazione simile tra i domini coperti da PCI-DSS o di altre norme di sicurezza potrebbe anche essere necessario seppellire i parametri perché alcuni regolamenti richiedono esplicitamente che gli elementi di autenticazione rimangano fuori da URL che potrebbero essere banalmente riprodotti (da cronologie del browser, registri proxy, ecc.).

4

intestazioni personalizzate presentano i seguenti vantaggi:

  • possono essere letti facilmente con strumenti di rete/script (autenticazione, meta informazioni, ...)
  • mantiene gli URL privi di roba di sicurezza (più sicuro, non in Browser/cache proxy)
  • mantiene gli URL più pulito: consente una migliore caching delle risorse
+0

possono anche essere rimossi/filtrati automaticamente dai proxy – fusi

0

È possibile utilizzare intestazioni personalizzate per includere ulteriori informazioni su un cons richiesta parzialmente lavorati idering that Enveloping non è una buona pratica. Le intestazioni sono secure.

Problemi correlati