2.101. rest
公开 REST 服务及其 OpenAPI 规格或调用外部 REST 服务。
2.101.1. 什么是内部
-
REST 组件, URI 语法:
rest:method:path:uriTemplate
-
REST API 组件, URI 语法:
rest-api:path
有关用法和配置详情,请参阅上述链接。
2.101.2. Maven 协调
在 code.quarkus.redhat.com 上使用此扩展创建新项目
或者将协调添加到现有项目中:
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-rest</artifactId> </dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-rest</artifactId>
</dependency>
2.101.3. 其他 Camel Quarkus 配置
此扩展取决于 平台 HTTP 扩展,并将其配置为提供 REST 传输的组件。
2.101.3.1. 包含带有 platform-http 的特殊字符的路径参数
使用 platform-http
REST 传输时,路径参数名称中不允许使用某些字符。这包括 '-' 和 '$' 字符。
要使以下 REST /dashed/param
路由示例正常工作,需要一个系统属性 io.vertx.web.route.param.extended-pattern=true
。
import org.apache.camel.builder.RouteBuilder; public class CamelRoute extends RouteBuilder { @Override public void configure() { rest("/api") // Dash '-' is not allowed by default .get("/dashed/param/{my-param}") .to("direct:greet") // The non-dashed path parameter works by default .get("/undashed/param/{myParam}") .to("direct:greet"); from("direct:greet") .setBody(constant("Hello World")); } }
import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
@Override
public void configure() {
rest("/api")
// Dash '-' is not allowed by default
.get("/dashed/param/{my-param}")
.to("direct:greet")
// The non-dashed path parameter works by default
.get("/undashed/param/{myParam}")
.to("direct:greet");
from("direct:greet")
.setBody(constant("Hello World"));
}
}
Vert.x Web 文档中 还有更多背景信息。
2.101.3.2. 配置备用 REST 传输供应商
要使用另一个 REST 传输提供程序,如 netty-http
或 servlet
,您需要将对应的扩展作为依赖项添加到项目中,并在 RouteBuilder
中设置提供程序。例如,您必须添加 org.apache.camel.quarkus:camel-quarkus-
依赖项以及设置供应商,如下所示:
servlet
import org.apache.camel.builder.RouteBuilder; public class CamelRoute extends RouteBuilder { @Override public void configure() { restConfiguration() .component("servlet"); ... } }
import org.apache.camel.builder.RouteBuilder;
public class CamelRoute extends RouteBuilder {
@Override
public void configure() {
restConfiguration()
.component("servlet");
...
}
}