【发布时间】:2018-07-10 19:09:38
【问题描述】:
假设我需要公开一项服务,我可以在其中请求对特定时间范围内的用户进行分析(常见操作、活动、关系等)。 我会立即认为这是:
/users/{userId}/analyses - POST
/users/{userId}/analyses/{analysisId} - GET
这里的问题是“分析”资源从何而来——它本质上是基于请求的,因为它是执行这种复杂分析的服务,也是具有最新状态的服务的用户数据。简而言之,它在请求之前是不存在的。
我目前的想法是第一次请求分析的三个选项(检索相同):
/users/{userId}/analyses?from=2017-01-01&to=2018-01-01 - GET
/users/{userId}/analyses - POST { "from": "2017-01-01", "to": "2018-01-01" }
/users/{userId}/analyses?from=2017-01-01&to=2018-01-01 - POST
我喜欢带有查询参数的 GET,因为我正在请求资源,并确定要使用的用户数据的范围,直到我认识到资源可能在请求之间发生变化(基于后端的数据或处理逻辑)更改),并且我需要再次调用以发布此资源。
我喜欢带有请求正文的 POST,因为我希望创建一个资源,直到我认识到我已经转移的状态不是我稍后检索时会返回的状态,也不是它甚至是相同的超媒体类型。
我喜欢带有查询参数但没有正文的 POST,因为我正在创建一个资源并确定该资源的范围,但我仍在传输一个不是资源或结束媒体类型的状态,而且我已经看到几乎没有其他带有查询参数的 POST 示例。
任何人都以 RESTful 方式处理过这些类型的操作?
【问题讨论】:
标签: rest http-headers httpverbs idempotent