扩展 Single ID REST 端点以支持多个 ID

use*_*900 5 java rest json extending multiple-input

我有一个 ID REST API,我需要对其进行扩展以支持多个(最多 10K)ID。基本上是在所有相关 ID 上运行更新,而不是在网络中发送 10Ks 请求。

当前端点:

@POST
@Path("{id}/update")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public ResponseVO updateBlockReason(@PathParam("id") int id, List<RequestVo> requestVo) {
Run Code Online (Sandbox Code Playgroud)

建议的一种选择是以逗号分隔的值作为stackexchange 的 answer-by-ids

/answers/{ids} GET 的使用

{ids} 最多可以包含 100 个分号分隔的 ID。要以编程方式查找 id,请在答案对象上查找 answer_id。

这是类似答案的情况

http://our.api.com/Product/<id1>,<id2> :as James 建议可以作为一个选项,因为 Product 标签之后是一个参数

但这对我来说似乎很尴尬,并且RequestVo对于所有 ID 都是一样的(目前很好,但以后添加此类支持会更难)

看来我需要将 Path 变量更改为将其添加到 RequestVO 中

这意味着 Id 将是一个 JSON 密钥,例如

[{
"id" : "1",
"name": "myAttribute"
"toggle": true
},
{
"id" : "2",
"name": "mySecondAttribute"
"toggle": false
}
]
Run Code Online (Sandbox Code Playgroud)

这是正确的方法还是我错过了什么?

预先感谢您的任何评论\答案

当前请求 VO

@Data
@AllArgsConstructor
@NoArgsConstructor
public class RequestVO {

 private String name;
 private boolean toggle;
 // will add now private int id
 }
Run Code Online (Sandbox Code Playgroud)

我还担心,如果我想(要求之一)使用相同的请求(如 name=doA,toggle=true)更新 10Ks Id,我将不得不复制请求 VO 而不是单独发送 ID

ssc*_*ass 1

我发现该路径product/{id}/update有问题,因为您可以通过映射@Put-requestproduct/{id}自身来实现类似的行为。请求映射已经明确了 READ、WRITE 的区别。\n此外,是否在 Restful url 中使用动词本身就是一个主题。

\n\n

假设您可以使用复数端点,这可能看起来像/products/{id}.

\n\n

因为您想要批量更新产品,所以您可以映射@Put-requests/products现在,并在 RequestBody 中包含更新的产品列表。请记住,这会使响应变得有些复杂,因为您可能必须返回Http-207以回答列表中每个元素的正确更新状态。

\n\n
\n

我想要 1 个逻辑端点用于更新

\n
\n\n

您可以为此拥有一个逻辑服务方法,但实际上不是端点。\n您已经提到了批量更新路径中的问题。/{id}\n如果您真的非常需要,我会@Put从中删除 -mapping/products/{id}并重定向/products到更新内容将是单个元素列表,或者更复杂一点,通过 mediaType 进行区分(这又意味着两个端点,但是一个 url)。

\n\n

编辑:\n我只是碰巧了解了 VO 问题。你不是在更新产品,而是它的一部分(RequestVO 这个名字误导了我)。\n这@Patch-mapping对我来说就像 a,产品的一部分得到更新。\n所以我仍然会使用/products但带有@Patch-mapping.

\n\n
\n

当客户端需要完全替换现有资源时,他们可以使用 PUT。当他们\xe2\x80\x99进行部分更新时,他们可以使用HTTP PATCH。

\n
\n\n

这会带来另一个问题,@Post仅在 id 未知时使用(通常在创建某些内容并分配 id 之前,用于更新使用并重@Put用分配的 id)\n使用 post 在技术上是可行的,但由于幂等性而不建议。

\n