REST API可选路径元素

时间:2016-02-29 11:30:17

标签: api rest

我正在设计一个新的API,并试图让它尽可能简单。对于预期的系统,大多数API消费者将仅引用属于它们的对象,但是其他一些帐户将“拥有”其他人帐户中的对象。问题是帐户是否成为路径的必需部分,或者是否包含这些特殊超级帐户。

以下是一个示例规范,可在单个用户上下文(帐户ID“basic1”)中正常工作:

# return person "s4t4s2" for account "basic1"
GET /v1/person/s4t4s2 
# return team "g3a35a" for account "basic1"
GET /v1/team/g3a35a 

对于超级帐户,他们有自己的对象,上面的实现工作,但他们也需要访问他们实际拥有的帐户的属性(帐户ID“super1”):

# return person "s4t4s2" for account "super1"
GET /v1/person/s4t4s2 
# get team "g399a2" for account "super1"
GET /v1/team/g399a2 
# return person "s4t4s2" for account "basic1"
GET /v1/accounts/basic1/person/s4t4s2 

因为我的大多数消费者都在处理单一帐户视图,所以最好的做法是对所有帐户使用第二种格式,或者在省略帐户时使用这两种格式并通过身份验证信用自动确定范围完全有效吗? / p>

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那些是相同的" person"资源,但他们有多个URI?我可能更喜欢为单个资源实例使用一个URI。即使它有不同的观点"。不同的观点仍然可以通过使用不同的media-type来解决,或者只是根据用户的权限在同一media-type上填写不同的字段。

为单个实例提供单个URI的优点是可以对其进行书签,缓存等。例如,如果用户的团队/帐户视图发生更改,则无法重复使用其链接因为URI改变了。我认为这不是一个好的设计。

如果我的理解是错误的,并且/v1/accounts/basic1/person/s4t4s2/v1/person/s4t4s2不是同一个人,那么请忽略我的评论。 :)