设计一个RESTful API:如何命名URI和自定义头部?

3

编辑:我目前已经解决了我的问题(至少是暂时的)。

最近我一直在使用Zendesk REST Api,他们使用自定义的“X-On-Behalf-Of”头来查找特定用户打开的票务,这让我想到了Restful Api设计选择(没有特定的语言,更多的是关于如何命名URI的问题)。我还阅读了与自定义HTTP头相关的问题,但它给我留下了更多的问题而不是答案。

假设我有一个处理租赁公寓申请的示例restful web服务,客户端使用Basic Auth(保持简单)进行身份验证。将基本数据定义为:

  • 用户(可以是房东或租户类型)
  • 表单(由一个或多个文档资源和一些表单元数据组成,例如表单名称和版本信息)
  • 然后是某种对应于租赁申请的资源,它将表单、申请人(一个或多个租户)、房东以及一些元数据(如状态和日期)联系在一起。

我正在努力正确地模拟应用程序资源的URI,尤其是在客户端角色方面。 (假设api根为https://api.example.com/

如何允许房东获取发送给他们的应用程序列表?我的直觉是发出“GET /applications”请求,Basic Auth让服务器知道要为哪个用户构建列表;同样,“GET /applications”由租户请求将返回他们发送的应用程序列表...但我不确定在同一URI中混合匹配发送者与接收者列表是否是一个稳健的设计。我应该以不同的方式考虑“/applications”资源,例如为每个用户允许类似“/applications/[USER_IDENTIFIER]”的层次结构吗?

此外,无论我的应用程序URI设计如何,假设房东能够代表租户创建应用程序。这是否更好地通过发送自定义标题(如“X-Create-On-Behalf-Of: somerenter@example.com”)来完成PUT/POST创建请求?还是我的模式应该定义一个字段,允许这种替代情况。

我非常业余,在这方面我对我的假设/设计持开放态度,并且对于学习有关设计RESTful api的更多指针,我感谢你的阅读。


1
在考虑使用 x- 标头之前,请阅读 http://tools.ietf.org/html/draft-saintandre-xdash-03。 - Darrel Miller
+1 给 @DarrelMiller,我甚至没有考虑过 X-header 的问题。 - Foot
1个回答

2
我认为我已经找到了一个解决方案。
房东和租客实际上只是同一对象的子类,我将其称为“Party”(作为交易的一方,而不是生日聚会)。因此,每个人都有自己的资源,命名为/party/PARTY_ID。
很容易扩展这个想法,看到/party/SOME_LANDLORD/applications和/party/SOME_RENTER/applications可以解决我的问题。它还消除了我考虑自定义标头的需要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接