我正在研究 RESTFul API 设计,但我对以下用例感到困惑:
我有用户和用户贷款的贷款。需要 API a) 用户管理 b) 获取所选用户的贷款信息。
用例 a) 相当简单。端点将通过 GET /api/users/ 来获取用户信息。 如何设计 API 端点来获取用户的负载信息:
GET /api/loans/<user unique id>/
or
GET /api/users/<user unique id>/loans
请注意,这与两者都用于唯一标识用户不同。
如有任何建议,我们将不胜感激。
谢谢你,
拉吉
REST 并不关心你的资源标识符使用什么拼写。
因此,标识符拼写很像变量名拼写;选择符合当地惯例的拼写是个好主意。
URI 规范将“分层信息”与非分层信息区分开来。人们可以合理地认为“鲍勃收集贷款”在层次上从属于“鲍勃”,并且标识符的拼写应该反映这一点
/api/users/12345
/api/users/12345/loans
这种拼写的另一个优点是,由于相对引用
,引用从属于 Bob 的其他资源是微不足道的
uri(/api/users/12345/addresses) === uri(/api/users/12345/loans).resolve(../addresses)
但是,这对资源之间的关系没有任何影响。例如,对
/api/users/12345
的成功不安全请求将使之前缓存的该资源表示无效,但这对
/api/users/12345/loans
根本没有任何影响。
例如:GET /api/users/12345/loans
DELETE /api/users/12345
对于客户端而言,标识符拼写的相似性并不意味着这两个资源之间有任何特殊关系;即使用户资源已被删除,缓存中
loans
资源的表示仍将被视为有效。
对于设计 RESTful API,特别是在处理资源之间的关系时,保持端点的清晰度和逻辑结构至关重要。在您描述的场景中,用户可以获取贷款,并且您需要获取特定于用户的贷款信息,RESTful 设计鼓励以分层方式表示资源及其关系。
/贷款
这种方法更加直观和 RESTful,原因如下:
获取/api/贷款/
虽然这种方法在技术上可行,但由于以下几个原因,它在 RESTful 设计原则方面不太直观: