如果我需要两个 GET,任务的 RESTFUL API 应该是什么样子?

How should RESTFUL API for tasks look like if I need two GETs?

我想为网站抓取服务设计一个RESTful API。用户将任务委托给服务。每个任务都是一个必须进行换码的网站。用户可以检查任务的状态。任务完成后,用户可以获取任务结果。 状态可以是 "Waiting"、"In progress" 或 "Done",完成后用户可以获得数据。

我现在拥有的是:

我还需要两个端点:一个用于获取任务状态,一个用于从网站获取抓取的数据。 GET 应该是什么样子的?

或者也许

但是 return /tasks/{id}/ 会怎样呢?

如果我还想将 scapped 数据显示为 html 怎么办? 我应该使用

RESTFULapi 的路由命名没有硬性规定。 您可以遵守约定、了解最佳实践、来自 SO 的建议,但归根结底,您是设计您的 API 的人,因此您比其他任何人都更了解什么适合您的特定用例.

搜索 "rest api naming best practices" 或 "how to structure rest api routes",您会得到很多想法。

我和@jonrsharpe 提出的 2 个建议都是有效的,由您来定义对您的项目有意义的内容。

我真的不知道这些限制,但 GET /tasks/{id} 可以 return 如果可用,状态和数据。

如果您不想这样做(例如,从性能角度来看,如果过于频繁地获取数据会成为一个问题),那么拥有以下内容似乎是明智的:

GET /tasks/{id} @returns status and other plain task fields

然后:

GET /tasks/{id}/scrappeddata @returns data

为什么?因为,这种方式可能最符合您的模型(and/or 您的 API 用户心目中的心智模型)。

Rest API 教程中给出的资源命名的一般规则很有帮助:https://www.restapitutorial.com/lessons/restfulresourcenaming.html

POST /tasks - post a URL to scrape
GET /tasks - returns a list of tasks

很好。请注意,当您 POST 成功时,缓存失效开始。通用客户端将知道先前返回的任务列表表示不再有效。

GET /tasks/{id} - return a status? Or return the data?

为什么不两者兼而有之? /tasks/{id} 标识一个资源;你可以使用任何你喜欢的表示形式。表示没有理由不包含可选元素。

(Herustic:网页会是什么样子?你真的觉得这个概念需要两个不同的页面吗?如果不需要,那么它可以可能是您 API 中的单个资源。)

what if I would also like to present scapped data as html?

相同的标识符可以用于多种表示;客户端可以使用 Accept header 向服务器描述其偏好。

您可能想考虑一下客户端如何知道哪些表示是可能的问题。在网络上,HTML 的规范描述了许多不同类型的链接——例如,浏览器在遇到脚本标签或图像标签时可以声明不同的偏好。您会希望在自己的媒体类型中有类似的东西。

决定这些也应该是不同的资源没什么错误。两种方法都可以以与 REST 架构风格一致的方式实施。