如何为(RESTful)API定义ID?

时间:2013-05-10 16:23:11

标签: api rest

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

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

GET /people/{:licensee_id}

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

2 个答案:

答案 0 :(得分:2)

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

如果我这样做,我会从两个不同的URL公开相同的资源,如:

/licensee/:licensee_id
/people/:person_id

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

除了对API的消费者来说更容易之外,其中一个原因是,您实施起来更容易,您无需了解传递给您的内容是{{1或licensee_id

答案 1 :(得分:0)

这样做是有意义的。你并没有真正放弃任何重要的信息,这些信息会使某人更难以进行SQL注入攻击(因为其他表中引用id的所有外键都会有不同的名称)。 / p>

如果不能直接访问id字段,则需要使用从唯一用户字段创建的uuid或md5等索引的不同列。我认为这样做的唯一好处就是有人无法使用API​​来“走动”用户或其他对象。