对于作为资源的内部标识符(如person_id
)的系统,是否可以在不同的唯一值(如licensee_id
)上调用直接API访问权限?
那么这样的API设计是否合理?
GET /people/{:licensee_id}
和
PUT /people/{:licensee_id}
{
"name": "John"
}
答案 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来“走动”用户或其他对象。