Java 与Camel集成的基于REST的服务中的API版本管理

Java 与Camel集成的基于REST的服务中的API版本管理,java,rest,apache-camel,esb,apache-servicemix,Java,Rest,Apache Camel,Esb,Apache Servicemix,我可以成功地创建基于Camel的应用程序,该应用程序使用REST公开一组web服务。(到目前为止,我已经使用了基于servlet的端点)。在将来,我们可能会观察到各种变化,并且在一段时间内仍然支持旧版本的API,所以我们需要支持版本控制 过去,我们通常在URL中添加参数来跟踪传入请求的API版本。我相信HTTP头也可以用于同样的目的 现在,在骆驼世界中,我们如何跟踪API的版本。(例如abja.com/v1/getOrders) 出于好奇,cxfrs或restlet是否具有内置支持?可能性1:为

我可以成功地创建基于Camel的应用程序,该应用程序使用REST公开一组web服务。(到目前为止,我已经使用了基于servlet的端点)。在将来,我们可能会观察到各种变化,并且在一段时间内仍然支持旧版本的API,所以我们需要支持版本控制

过去,我们通常在URL中添加参数来跟踪传入请求的API版本。我相信HTTP头也可以用于同样的目的

现在,在骆驼世界中,我们如何跟踪API的版本。(例如abja.com/v1/getOrders)


出于好奇,cxfrs或restlet是否具有内置支持?

可能性1:为不同版本定义单独的入口点

例如,第1版:

from("restlet:http://localhost:8080/1/users/{id}/like/{beer}")
    .process(new Processor() {
        public void process(Exchange exchange) {
            // version 1 processing
        }
    );
例如,第2版:

from("restlet:http://localhost:8080/2/users/{id}/like/{beer}")
    .process(new Processor() {
        public void process(Exchange exchange) {
            // version 2 processing
        }
    );
可能性2:定义一个入口点并将版本号传递给处理器

例如:

from("restlet:http://localhost:8080/{version}/users/{id}/like/{beer}")
    .process(new Processor() {
        public void process(Exchange exchange) {
            int version = exchange.getIn().getHeader("version", Integer.class);
            if (version == 1) {
                // version 1 processing
            } else {
                // version 2 processing
            }
        }
    );