【发布时间】:2019-05-15 02:21:16
【问题描述】:
更新部分资源的最 RESTful 方式是什么,其中资源的生成是在服务器端完成的,而不是在客户端。这不是幂等操作,因为服务器上的支持数据可能会在请求之间发生变化。
我正在创建一个 Rest API,并且我已经做出了一个设计选择,我非常确定前进的道路。
我有一个想要刷新的资源,其中包括根据支持数据创建一个大型 json blob,然后将该 json blob 保存到数据库中,然后再将其返回给用户。
我的问题是,执行此操作的最 RESTful 方式是什么?由于客户端不执行计算,而且它也不是幂等的,因为每次调用之间数据集可能会发生变化,我觉得使用 PUT 是不自然的。
我选择了一个 POST,但这也不对。
第三种选择是有一个描述刷新动作的子资源 - 这也感觉不正确。
例如,我有一个文档:
GET /document/<documentId>
这将返回类似:
"body": {
"createdAt": "2019-01-01 12:00:00",
"updatedAt": "2019-01-01 13:00:00",
"name": "example",
"location": "example",
"city": "example"
}
这些字段是由服务器在创建文档时生成的,客户端不会更新它们。
为了让客户端发出他们希望服务器重新生成文档的信号,我决定:
POST /document/<documentId>
"body": {
"param1": "updatedparam1",
"param2": "updatedparam2"
}
另一种方法是执行以下操作:
POST /document/<documentId>/refresh
"body": {...}
但这感觉更像是 RPC 调用而不是 REST。
这在逻辑上有意义吗?我没有看到很多建议 POST 可以针对单个资源而不是集合。
如果我可以扩展任何内容,请告诉我,我一直在努力解决这个问题,可能错过了一些东西。
【问题讨论】:
标签: rest web-applications architecture api-design