我的REST服务需要支持加载/重新加载资源而不是直接创建它。
目前的API:
GET /books
GET /books/12345
DELETE /books/12345
一本书看起来像这样:
{"id": 12345, "title": "three little bears", "author": ...}
目前还不清楚是否
Request: PUT /books/12345
Response: HTTP 204 No Content
或者
Request: POST /books
Payload: {"id": 12345}
Response: HTTP 201 Created, Location: /books/12345
"加载"或"重新加载"书本的更好方法是:
详细说明: "加载"或"重新加载"将查询数据库以通过id检索图书,并将结果放置在持久缓存中。对于GET请求,会使用缓存进行查询。图书的属性可能会在数据库中更改,这意味着"加载"或"重新加载"不是幂等操作。只有管理员才能使用load / reload和delete操作。
我认为正确的方法是使用POST,因为PUT应该是幂等的。但是,使用POST似乎很奇怪,因为针对id = 12345的/book的多个POST仅会创建单个资源(尽管会多次重新创建)。
我考虑了以下其他选项,但它们似乎更加过分:
* POST /books/12345/load
* POST /books/load, with payload {"id": 12345}
* POST /load/book, with payload {"id": 12345}
你认为如何?
更进一步地,我想提供一个异步的加载/重新加载操作,但我不想创建一个用户可以跟踪的操作/作业资源,我只想要一个即插即用的快速操作。
例如:对于书籍12345,异步加载/重新加载到缓存中。我只需要服务响应HTTP 202 Accepted就足够了。无需询问加载/重新加载的进度。
简而言之:我正在构建一个REST服务来管理图书缓存。加载/重新加载和删除操作仅能由管理员执行,而GET请求则对所有人开放。加载/重新加载操作应从数据库中加载/重新加载记录。