我正在为我公司的内部数据设计一个 HATEOAS API,但在发现链接时遇到了麻烦。考虑以下一组步骤,让某人在此系统中检索有关特定员工的信息:
- 用户发送 GET 以
http://coredata/
获取所有可用资源,返回多个链接,包括一个标记为 rel = "http://coredata/rels/employees
" - 用户在第一个请求的 rel 上遵循 HREF,在(例如)执行 GET
http://coredata/employees
最后一次通话返回的数据是我的难题,也是我听到不同建议的情况。这里是其中的一些:
- 该 GET 将返回所有员工(可能带有截断的数据),并且客户端将负责从该列表中选择所需的员工。
该 GET 将返回许多 URI 模板链接,描述如何查询/获取一名员工/获取所有员工。就像是:
"_links": { "http://coredata/rels/employees#RetrieveOne": { "href": "http://coredata/employees/{id}" }, "http://coredata/rels/employees#Query": { "href": "http://coredata/employees{?login,firstName,lastName}" }, "http://coredata/rels/employees#All": { "href": "http://coredata/employees/all" } }
我有点卡在这里最接近 HATEOAS 的东西。对于选项 1,我真的不想让我的客户每次都为了导航而检索所有员工,但我可以看到在示例 2 中使用 URI 模板如何引入一些带外知识。
我的另一个想法是使用 RetrieveOne、Query 和 All 操作作为我的酷 URL,但这似乎违反了您应该能够从一个基本 URI 导航到所需资源的概念。
有没有其他人设法想出一个很好的方法来处理这个问题?一旦您检索到一个资源或一组资源,导航就变得非常简单,但它似乎很难用于发现。