对于作为资源的内部标识符(如person_id
)的系统,提供可在不同唯一值(如 )上调用的直接 API 访问是否有意义licensee_id
?
那么有这样的 API 设计合理吗?
GET /people/{:licensee_id}
和:
PUT /people/{:licensee_id}
{
"name": "John"
}
这意味着您正在谈论的资源没有唯一标识符,但它有两个。
如果我这样做,我会从两个不同的 URL 公开相同的资源,如下所示:
/licensee/:licensee_id
/people/:person_id
因此,如果您的 API 的一部分代码中的用户正在与人打交道(即person_id
无需任何其他调用即可轻松访问)调用第二个,否则他可以调用第一个。
除了 API 的使用者更容易这一事实之外,其中一个原因是它更容易实现,您不必了解传递给您的内容是 alicensee_id
还是 aperson_id
这样做是有道理的。您并没有真正放弃任何重要信息,这些信息会使某人进行 SQL 注入攻击变得不那么困难(因为其他表中引用 id 的所有外键无论如何都会有不同的名称)。
如果不直接访问 id 字段,则需要使用从唯一用户字段创建的 uuid 或 md5 等索引的不同列。我认为这样做的唯一好处是有人将无法使用 API 来“走”用户或其他对象。