gpt4 book ai didi

java - Dropwizard 多个 Rest API 版本

转载 作者:行者123 更新时间:2023-11-29 08:50:23 24 4
gpt4 key购买 nike

目前我正在设计如何处理版本化 rest API 中的路由,其中​​版本不是 url 的一部分,而是通过 header 变量发送。

我考虑过/看到过类似的事情:

根据 header 变量重写 url 即请求 /orders {X-Media-Type: v1} 将重写为/v1/orders 然后我们可以有一个 @Path("/v1/orders") OrderV1Resource {},因此制作 v2 将是微不足道的 @Path("/v2/orders") OrderV2Resource {}。 (我的首选)How to use a servlet filter in Java to change an incoming servlet request url?

有一个 @Path("/orders") OrderResource {},其中每个方法都有一个注入(inject)的 HeaderParam,我可以检查 header 变量,然后决定我想要哪个 Order API 实现使用(这对我来说似乎很乱)

// pseudo-java code
@Path("/orders")
OrderResource {
OrderV1Impl v1Impl;
OrderV2Impl v2Impl;
@GET
public List<Order> findAll(@HeaderParam header) {
version = header.get("accepts")
if(version.equals("v1")) { return v1Impl.findAll() }
else if(version.equals("v2")) { return v2Impl.findAll() }
return error
}
}

或者只是将它们捆绑在单独的 JARS 中,让服务查看 header 并路由到正确的版本。 (如果应用程序变得非常大,似乎是有道理的)

最佳答案

我最终通过 header 传递版本,然后使用它通过 javax.servlet.Filter 路由所需的资源。

示例接受 header :接受:application/vnd.datarank.v1+json

关于java - Dropwizard 多个 Rest API 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23022244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com