Apache Camel does support multiple approaches to defining and using REST services. In particular, Apache Camel provides a REST DSL (Domain Specific Language), which is a simple but powerful fluent API that can be layered over any REST component and provides integration with Swagger.
Overview
Apache Camel provides many different approaches and components for defining REST services in your Camel applications. In this content, we will provide a quick overview of these approaches and components, to allow you to decide which implementation and API best fit your requirements.
What is REST?
Representational State Transfer (REST) is an architecture for distributed applications that centers around the transmission of data over HTTP, using only the four basic HTTP verbs: GET
, POST
, PUT
, and DELETE
.
In contrast to a protocol such as SOAP, which treats HTTP as a mere transport protocol for SOAP messages, the REST architecture exploits HTTP directly. The core insight is that the HTTP protocol itself, augmented by a few simple conventions, is eminently suitable to serve as the framework for distributed applications.
REST invocation
Because the REST architecture is built around standard HTTP, in many cases you can use a regular browser as a REST client. For example, to invoke a simple Hello World REST service running on the host and port, localhost:9091
, you could navigate to a URL like the following in your browser:
http://localhost:9091/say/hello/Jane
REST Wrappers
These REST wrapper layers offer a simplified syntax for defining REST services and can be layered on top of different REST implementations:
REST DSL
The REST DSL (in camel-core
) is a facade or wrapper layer that provides a simplified builder API for defining REST services. The REST DSL does not itself provide a REST implementation: it must be combined with an underlying REST implementation. For example, the following Java code shows how to define a simple Hello World service using the REST DSL:
rest("/say") .get("/hello/{name}").route().transform().simple("Hello ${header.name}");
REST Component
The REST component (in camel-core
) is a wrapper layer that enables you to define REST services using a URI syntax. Just like the REST DSL, it does not itself provide a REST implementation. Therefore, it must be combined with an underlying REST implementation.
The following code shows how to define a simple Hello World service using the camel-rest component:
from("rest:get:say:/hello/{name}").transform().simple("Hello ${header.name}");