2012-10-25 11 views
12

Sto considerando i seguenti due modi di identificare l'inquilino di una richiesta HTTP, in un ambiente multi-tenant - hardcoding l'inquilino nella URI:Passa il titolare in un'intestazione HTTP personalizzata RESTful?

/{tenantUuid}/foos/{id}

o passando l'inquilino in un costume HTTP Intestazione, come ad esempio:

X-Auth-Token: 7d2f63fd-4dcc-4752-8e9b-1d08f989cc00"

(simile a: http://docs.openstack.org/api/quick-start/content/)

Si noti che la {id} è univoco per tutti gli inquilini: pertanto, /{tenantUuid}/foos/{id} identificherà in modo univoco una risorsa foo.

La mia domanda è - è teoricamente corretto utilizzare un'intestazione personalizzata per questo, o l'uso di un'intestazione personalizzata non è riposante. Sono anche consapevole del fatto che le intestazioni X-... sono state deprecate, ma la domanda sta ignorando questo fatto.

Grazie.

risposta

7

L'URI deve identificare in modo univoco la risorsa.

Ma questo è ortogonale all'autorizzazione e all'accesso. Due persone potrebbero chiedere la stessa risorsa e una non ottiene nulla e copia eliata o errore mentre l'altra otterrebbe il tutto perché sono identificate correttamente nell'intestazione Autorizzazione.

Ora l'URI può includere l'ID titolare come parte del suo URI univoco, non c'è niente di sbagliato in questo. Ma in entrambi i casi, la risorsa stessa (in qualche modo, incluso da un componente del suo URI o da uno stato interno) "sa" a quale tenant appartiene.

Quindi, nel tuo caso dovresti utilizzare l'intestazione di autorizzazione HTTP per identificare correttamente il richiedente e quindi utilizzare tali informazioni per determinare internamente se e quale sarà la risposta per una richiesta specifica. Un richiedente può essere autorizzato a vedere nessuno, uno, alcuni o tutti gli inquilini su un sistema.

Non è necessario un intestazione personalizzata per questo caso d'uso.

1

Se fosse necessario l'ID titolare per identificare la risorsa, il modo RESTful sarebbe di averlo nell'URL. Se non lo fai (id è unico tra i tenant), tecnicamente, non ne hai bisogno nell'URL o nell'intestazione.

Poiché id è univoco tra tutti i tenant, quindi/foos/{id} può identificare in modo univoco tale risorsa ed è RESTful.

Eviterei di utilizzare intestazioni personalizzate come metodo per indirizzare una risorsa. Dovrebbero essere usati invece per passare le informazioni accessorie come i tipi di accettazione, i token di autenticazione, ecc ... È necessario decidere se è fondamentale identificare la risorsa e inserirla nell'URL oppure no.

0

Potrebbe essere interessante per la tua app separare utenti da diversi inquilini che da app come l'elenco di craig per separarlo dalle città.

Ma vuoi mostrare tutti i tipi di separazioni nel tuo URI? Vuoi un URI come /comcast/blackeyes/long-haired/london/?

Essere RESTful o RESTenough non risponderà a questa domanda. È solo una questione di gusti.

Problemi correlati