2012-10-25 12 views
12

Zastanawiam następujące dwa sposoby identyfikacji najemcy żądanie HTTP w środowisku multi-tenant - hardcoding najemcy w URI:Czy przechodzi najemcę w niestandardowym nagłówku HTTP RESTful?

/{tenantUuid}/foos/{id}

Albo przechodząc najemcy w zwyczaju HTTP nagłówek, takich jak:

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

(podobne do: http://docs.openstack.org/api/quick-start/content/)

Należy zauważyć, że w {id} jest unikalny dla wszystkich najemców - tak więc /{tenantUuid}/foos/{id} nadal jednoznacznie identyfikuje zasób foo.

Moje pytanie brzmi - czy teoretycznie słuszne jest używanie do tego celu niestandardowego nagłówka, czy też użycie niestandardowego nagłówka nie jest spokojne. Jestem również świadomy, że nagłówki X-... zostały wycofane, ale pytanie to ignoruje ten fakt.

Dzięki.

Odpowiedz

7

Identyfikator URI powinien jednoznacznie identyfikować zasób.

Jest to jednak ortogonalne z uprawnieniami i dostępem. Dwie osoby mogą prosić o ten sam zasób, a nic nie dostanie, a także usunąć kopię lub błąd, podczas gdy drugi dostanie całą rzecz, ponieważ są one właściwie zidentyfikowane w nagłówku Authorization.

Teraz identyfikator URI może zawierać identyfikator dzierżawcy jako część unikalnego identyfikatora URI, nie ma w tym nic złego. Ale tak czy inaczej, sam zasób (w jakiś sposób, włączając w to składnik jego URI lub stan wewnętrzny) "wie", do którego lokatora należy.

W twoim przypadku powinieneś używać nagłówka autoryzacji HTTP, aby prawidłowo zidentyfikować zgłaszającego, a następnie użyć tej informacji do wewnętrznego określenia, czy i jaka będzie odpowiedź na konkretne żądanie. Wnioskodawca może być upoważniony do nieobecności żadnego, jednego, niektórych lub wszystkich lokatorów w systemie.

W tym przypadku nie powinno być potrzeby stosowania niestandardowego nagłówka.

1

Jeśli potrzebujesz identyfikatora dzierżawcy w celu identyfikacji zasobu, wówczas RESTful będzie go mieć pod adresem URL. Jeśli tego nie zrobisz (identyfikator jest unikalny dla najemców), to technicznie nie potrzebujesz go w adresie URL ani w nagłówku.

Ponieważ identyfikator jest unikalny dla wszystkich najemców, wtedy/foos/{id} może jednoznacznie zidentyfikować ten zasób i jest RESTOWNOWY.

Unikałbym używania niestandardowych nagłówków jako sposobu adresowania zasobu. Powinny one być używane zamiast przekazywania dodatkowych informacji, takich jak typy akceptacji, tokeny uwierzytelnienia itp. Musisz zdecydować, czy kluczowe jest zidentyfikowanie zasobu i umieszczenie go w adresie URL, czy nie.

0

To może być tak interesujące dla Twojej aplikacji, aby oddzielić użytkowników od różnych najemców niż aplikacji takich jak lista Craiga, aby oddzielić ją od miast.

Ale czy chcesz pokazać wszystkie rodzaje separacji w swoim identyfikatorze URI? Czy chcesz URI, taki jak /comcast/blackeyes/long-haired/london/?

Będąc RESTful lub RESTenough nie odpowiem na to pytanie. To tylko kwestia gustu.

Powiązane problemy