2013-05-10 91 views
0

对于一个作为资源的内部标识符(如person_id)的系统,是否可以在不同的唯一值上调用直接API访问权限(如licensee_id)?如何定义(RESTful)API的ID?

那么这样的API设计是否合理?

GET /people/{:licensee_id} 

和:

PUT /people/{:licensee_id} 
{ 
    "name": "John" 
} 

回答

2

这意味着,你在谈论的资源没有一个唯一的标识符,但 有两个。

如果我做,我会从两个不同的URL暴露在相同的资源,像这样:

/licensee/:licensee_id 
/people/:person_id 

因此,如果您的API中的代码的一部分用户打交道的人(即可轻松访问person_id而无需其他呼叫)呼叫第二个,否则他可以呼叫第一个。

其中一个原因,除了它对您的API的消费者更容易的事实之外,是您实施起来更容易,您不必了解传递给您的是licensee_id或a person_id

+0

我现在走的是'/ people?licensee_id = {:licensee_id}'。我想我最终可能会得到'/ by-by-license','/ people-by-blah',因为我的上下文中的一些独特属性只是属性,而没有定义其他类型的人员。最后,我确实喜欢你的建议的清晰度。 – eoinoc 2013-05-16 09:33:34

+0

很高兴帮助^^ – 2013-05-16 09:36:12

0

这样做是有道理的。你并没有真正放弃任何重要的信息,这会让别人很难做出SQL注入攻击(因为引用id的其他表中的所有外键都会有不同的名字)。

如果不是直接访问id字段,那么需要一个不同的列,这个列的索引类似于从独特的用户字段创建的uuid或md5。我认为这样做的唯一好处是有人不能使用API​​来“漫游”用户或其他对象。