rest - 对于仅从某些文档中提取数据的 REST API 端点来说,合适的资源名称是什么?
问题描述
我正在集思广益为POST
请求设计一个 REST API 端点,该端点从我在有效负载中提供的一些文档中提取数据并将其存储在数据库或某个临时位置中。我还需要GET
和DELETE
端点来检索和删除提取的数据。我试图找出一个resource
名称来证明这个数据提取过程的输出是正确的,我相信它extracted data
也符合 REST API 约定,即不将资源名称命名为动词而是名词。按照 REST API 约定,我们正在处理的资源只是extracted-data
. 我们不能给它命名,POST /extract-data
因为它变成了动词。或者类似的东西POST /data-extraction
我也不符合条件,因为它看起来更像是进程名称而不是资源。我相信做一个POST
提取数据的请求,我提供对象/文档作为输入,在输出中我创建的只是extracted-data
,我可以,我GET
也extracted-data
可以DELETE
,extracted-data
使它成为我可以处理的资源。所以根据我的思考过程,我想到了以下端点:
(我发/extracted-data
(ii.) 获取/extracted-data/{id}
(iii.) 删除/extracted-data/{id}
对于所述用例,上述端点是否真的是一个很好的资源命名,或者有更好的方法吗?
解决方案
请记住,REST 并不关心您为资源标识符使用的拼写约定,只要它们与RFC 3986中的生产规则一致。
我们不能将其命名为 POST /extract-data,因为它会变成动词
标识符的拼写无关紧要,因为方法标记是“请求语义的主要来源”
因为机器不在乎,所以我们有额外的自由度。所以我们可以设计 URI 来获得更多我们想要的东西。例如,通过将其与人类在谈论资源时使用的名称对齐。
Resources,在 REST 的上下文中是文档的概括。万维网是 REST 架构风格的参考实现;网络上有趣的资源是“网页”。
资源不是“动作”,它们是由动作修改的网页。因此,您要选择一个与网页/文档/资源的名称非常一致的标识符,而不是选择一个与更改操作一致的标识符。
推荐阅读
- c++ - 抛出析构函数导致内存泄漏
- sql - 如何在 BigQuery 中将多个列的空值替换为 0?
- database - Ktor 如何使用查询参数过滤掉数据
- javascript - 承诺等待抛出“RangeError:超出最大调用堆栈大小”
- java - 我正在努力将我的数据类连接到我的其余代码。它在我的代码中导致未解决的引用
- java - 在 Spark 中过滤和审计中间计数
- java - 如何检查 CSRF 安全性是否处于活动状态?
- json - 从在线 HTTP 获取 Flutter 中的查询
- dialogflow-cx - DialogFlow CX webhook 基础知识
- javascript - 使用 ReactTable 使用来自 JSON axios 请求的数据创建表