2012-10-25 47 views
12

我在考虑确定一个HTTP请求的租户,在多租户环境中的以下两种方式 - 硬编码租户的,URI:是否将租户传递给自定义HTTP标头RESTful?

/{tenantUuid}/foos/{id}

或者通过租户在自定义HTTP头,如:

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

(类似于:http://docs.openstack.org/api/quick-start/content/

注意,{id}在所有租户中都是唯一的 - 因此/{tenantUuid}/foos/{id}仍将唯一标识foo资源。

我的问题是 - 在理论上使用自定义标题是正确的,还是使用自定义标题不宁静。我也知道X-...标题已被弃用,但问题是忽略了这一事实。

谢谢。

回答

7

URI应该唯一标识资源。

但是这与授权和访问是正交的。两个人可能会要求相同的资源,一个人什么也得不到,并且抄袭或错误,而另一个人会得到整件事情,因为他们在授权标题中正确标识。

现在,URI可以包含租户ID作为其唯一URI的一部分,这没有什么错。但无论哪种方式,资源本身(以某种方式,包括通过URI的一个组成部分或内部状态)将“知道”它属于哪个租户。

因此,您应该使用HTTP授权标头来正确标识请求者,然后使用该信息来确定内部是否以及针对特定请求的响应是什么。请求者可以被授权在系统上看到没有,一个,一些或全部租户。

你不应该需要一个自定义标题在这个用例。

1

如果您需要租户ID来标识资源,那么RESTful方式就是将其放在URL中。如果你不这样做(id在租户中是唯一的),那么从技术上讲,你不需要它在URL或标题中。

由于id在所有租户中都是唯一的,因此/ foos/{id}可以唯一标识该资源并且是RESTful。

我会避免使用自定义标题作为解决资源的一种方式。应该使用它们来传递辅助信息,如接受类型,授权令牌等等。您需要决定识别资源并将其放入URL中是否至关重要。

0

您的应用将用户从不同租户中分离出来可能与将craig列表中的应用分离出城市一样有趣。

但是你想在URI中显示所有种类的分色吗?你想要一个URI,如/comcast/blackeyes/long-haired/london/

RESTful或RESTenough不会回答这个问题。这只是一个品味问题。

相关问题