在Camel中公开HTTP终结点的方法有很多:jetty,tomcat,servlet,cxfrs和restlet。 其中的两个组件– cxfrs和restlet也只需几行代码即可支持REST语义。 这个简单的示例演示了如何使用camel-restlet和camel-jdbc进行CRUD操作。 四个HTTP动词执行不同的操作,并映射到以下单个URI模板:
- POST –创建一个新用户: / user
- GET –请求URI指定的用户的当前状态: / user / {userId}
- PUT –使用新信息更新给定URI上的用户 : / user / {userId}
- 删除–删除由给定URI标识的用户: / user / {userId}
还有一个/ users URI,它返回所有用户,无论使用哪种HTTP方法。 用Camel创建这样的应用程序很简单。 添加所有必要的依赖项(restlet,spring,jdbc…)后,配置web.xml来加载Camel上下文:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:camel-config.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
并映射Restlet servlet
<servlet>
<servlet-name>RestletServlet</servlet-name>
<servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.component</param-name>
<param-value>RestletComponent</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>RestletServlet</servlet-name>
<url-pattern>/rs/*</url-pattern>
</servlet-mapping>
在Spring上下文中,还有更多的Restlet和一个内存中的数据源设置代码:
<bean id="RestletComponent" class="org.restlet.Component"/>
<bean id="RestletComponentService" class="org.apache.camel.component.restlet.RestletComponent">
<constructor-arg index="0">
<ref bean="RestletComponent"/>
</constructor-arg>
</bean>
<jdbc:embedded-database id="dataSource" type="HSQL">
<jdbc:script location="classpath:sql/init.sql"/>
</jdbc:embedded-database>
完成所有设置后,下一步是创建将处理HTTP请求并执行适当的CRUD操作的骆驼路由。 第一个是createUser路由,该路由仅使用POST请求中的参数执行SQL插入命令,并在响应正文中返回新创建的用户:
<route id="createUser">
<from uri="restlet:/user?restletMethod=POST"/>
<setBody>
<simple>insert into user(firstName, lastName) values('${header.firstName}','${header.lastName}'); </simple>
</setBody>
<to uri="jdbc:dataSource"/>
<setBody>
<simple>select * from user ORDER BY id desc LIMIT 1</simple>
</setBody>
<to uri="jdbc:dataSource"/>
</route>
“ manipulateUser”路由处理GET,PUT和DELETE HTTP方法,但是根据使用的方法,它执行不同的SQL命令:
<route id="manipulateUser">
<from uri="restlet:/user/{userId}?restletMethods=GET,PUT,DELETE"/>
<choice>
<when>
<simple>${header.CamelHttpMethod} == 'GET'</simple>
<setBody>
<simple>select * from user where id = ${header.userId}</simple>
</setBody>
</when>
<when>
<simple>${header.CamelHttpMethod} == 'PUT'</simple>
<setBody>
<simple>update user set firstName='${header.firstName}', lastName='${header.lastName}' where id = ${header.userId}</simple>
</setBody>
</when>
<when>
<simple>${header.CamelHttpMethod} == 'DELETE'</simple>
<setBody>
<simple>delete from user where id = ${header.userId}</simple>
</setBody>
</when>
<otherwise>
<stop/>
</otherwise>
</choice>
<to uri="jdbc:dataSource"/>
</route>
列出所有用户的最后一条路线是不言而喻的:
<route id="listUsers">
<from uri="restlet:/users"/>
<setBody>
<constant>select * from user</constant>
</setBody>
<to uri="jdbc:dataSource"/>
</route>
如果您想查看应用程序的运行情况,请从github获取源代码,并通过键入以下命令使用嵌入式maven-jetty插件运行它:如果已安装curl,甚至可以尝试一些快速查询:
要创建用户,请使用firstName和lastName参数发出http POST请求
curl -d 'firstName=test&lastName=user' http://localhost:8080/rs/user/
要更新现有用户,请使用firstName和lastName参数发出http PUT请求
curl -X PUT -d 'firstName=updated&lastName=user' http://localhost:8080/rs/user/2
要检索现有用户,请发出带有userId作为URL一部分的http GET请求
curl -X GET http://localhost:8080/rs/user/2
要删除现有用户,请发出http DELETE请求,并将userId作为URL的一部分
curl -X DELETE http://localhost:8080/rs/user/2
要检索所有现有用户,请向用户url发出http GET请求
curl -X GET http://localhost:8080/rs/users
参考:来自OFBIZian博客的JCG合作伙伴 Bilgin Ibryam提供的REST with Apache Camel 。
翻译自: https://www.javacodegeeks.com/2013/03/rest-with-apache-camel.html