2010-11-10 7 views
6

Vorrei fare una domanda di progettazione su un'API HTTP REST che sto esponendo.Domanda di progettazione REST più identificativi per una risorsa che deve essere esposta ai client

devo accedere a volte un widget con ID 3:

http://ourserver/service/widgets/3

widget con ID 3

Ma ho anche bisogno di accedere a volte un widget da esso è SKU #.

È errato esporre la stessa risorsa tramite 2 URL?

BUt Ho bisogno che i miei clienti ottengano un widget dal suo ID o dal suo SKU.

Quale delle seguenti opzioni è migliore?

  • http://ourserver/service/widgets/bysku/skyunumber
  • http://ourserver/service/widgets/skyunumber?idtype=sku

Ancora una volta a ripetere, ho bisogno i miei clienti per essere in grado di cercare un widget in 2 modi diversi. Qual è il modo migliore per progettare gli URL?

+0

Non so ... sembra irrilevante. Fai ciò che funziona. – Stephen

+2

Sto facendo una domanda sulla corretta progettazione di un servizio rilassante. Non è irrilevante, ma grazie per il tuo contributo. – rest

+0

Perché non riesci a passare lo stesso URI due volte? –

risposta

13

vorrei suggerire considerare quanto segue:

GET http://ourserver/service/widgets?sku=34342323 
=> 
303 See Other 
Location: http://ourserver/service/widgets/43 

GET http://ourserver/service/widgets/43 

Utilizzando un reindirizzamento, è possibile supportare qualsiasi numero di criteri per trovare i widget. Il problema chiave da considerare è che cosa succede quando si inizia a abilitare la memorizzazione nella cache. Se si restituiscono rappresentazioni da più URL si finisce per inquinare la cache con più copie e rende molto più difficile invalidare le copie nella cache quando si eseguono gli aggiornamenti.

+0

Bella idea, ma chiamerò questa API milioni di volte, creerebbe un sovraccarico significativo per me. – rest

+0

@rest La risposta 303 è di per sé memorizzabile nella cache, quindi si incorre in un solo roundtrip extra per sku. –

+0

Soluzione simile descritta in "RESTful Web Services" P.84 –

Problemi correlati