首页 > 解决方案 > 对于仅从某些文档中提取数据的 REST API 端点来说,合适的资源名称是什么?

问题描述

我正在集思广益为POST请求设计一个 REST API 端点,该端点从我在有效负载中提供的一些文档中提取数据并将其存储在数据库或某个临时位置中。我还需要GETDELETE端点来检索和删除提取的数据。我试图找出一个resource名称来证明这个数据提取过程的输出是正确的,我相信它extracted data 也符合 REST API 约定,即不将资源名称命名为动词而是名词。按照 REST API 约定,我们正在处理的资源只是extracted-data. 我们不能给它命名,POST /extract-data因为它变成了动词。或者类似的东西POST /data-extraction我也不符合条件,因为它看起来更像是进程名称而不是资源。我相信做一个POST提取数据的请求,我提供对象/文档作为输入,在输出中我创建的只是extracted-data,我可以,我GETextracted-data可以DELETEextracted-data使它成为我可以处理的资源。所以根据我的思考过程,我想到了以下端点:

(我发/extracted-data

(ii.) 获取/extracted-data/{id}

(iii.) 删除/extracted-data/{id}

对于所述用例,上述端点是否真的是一个很好的资源命名,或者有更好的方法吗?

标签: restmicroservicesdomain-driven-designapi-designswagger-2.0

解决方案


请记住,REST 并不关心您为资源标识符使用的拼写约定,只要它们与RFC 3986中的生产规则一致。

我们不能将其命名为 POST /extract-data,因为它会变成动词

标识符的拼写无关紧要,因为方法标记是“请求语义的主要来源”


因为机器不在乎,所以我们有额外的自由度。所以我们可以设计 URI 来获得更多我们想要的东西。例如,通过将其与人类在谈论资源时使用的名称对齐。

Resources,在 REST 的上下文中是文档的概括。万维网是 REST 架构风格的参考实现;网络上有趣的资源是“网页”。

资源不是“动作”,它们是由动作修改的网页。因此,您要选择一个与网页/文档/资源的名称非常一致的标识符,而不是选择一个与更改操作一致的标识符。


推荐阅读