如果我需要两个 GET,任务的 RESTFUL API 应该是什么样子?
How should RESTFUL API for tasks look like if I need two GETs?
我想为网站抓取服务设计一个RESTful API。用户将任务委托给服务。每个任务都是一个必须进行换码的网站。用户可以检查任务的状态。任务完成后,用户可以获取任务结果。
状态可以是 "Waiting"、"In progress" 或 "Done",完成后用户可以获得数据。
我现在拥有的是:
POST /tasks
- post一个URL来刮
GET /tasks
- returns 任务列表
我还需要两个端点:一个用于获取任务状态,一个用于从网站获取抓取的数据。 GET 应该是什么样子的?
GET /tasks/{id}
- return一个状态?或者return数据?
或者也许
GET /tasks/{id}/status
GET /tasks/{id}/data
但是 return /tasks/{id}/
会怎样呢?
如果我还想将 scapped 数据显示为 html 怎么办?
我应该使用
GET /tasks/{id}/data
或 GET /tasks/{id}/result
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 架构风格一致的方式实施。
我想为网站抓取服务设计一个RESTful API。用户将任务委托给服务。每个任务都是一个必须进行换码的网站。用户可以检查任务的状态。任务完成后,用户可以获取任务结果。 状态可以是 "Waiting"、"In progress" 或 "Done",完成后用户可以获得数据。
我现在拥有的是:
POST /tasks
- post一个URL来刮GET /tasks
- returns 任务列表
我还需要两个端点:一个用于获取任务状态,一个用于从网站获取抓取的数据。 GET 应该是什么样子的?
GET /tasks/{id}
- return一个状态?或者return数据?
或者也许
GET /tasks/{id}/status
GET /tasks/{id}/data
但是 return /tasks/{id}/
会怎样呢?
如果我还想将 scapped 数据显示为 html 怎么办? 我应该使用
GET /tasks/{id}/data
或GET /tasks/{id}/result
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 架构风格一致的方式实施。