> Markdown version of [Integration](https://vaadin.com/docs/next/building-apps/integration). Section index: [llms.txt](https://vaadin.com/docs/next/building-apps/llms.txt)

# Integration

A Vaadin application doesn’t need a REST API for its own user interface. Flow views call application services directly on the server, and [React views](https://vaadin.com/docs/next/building-apps/react.md) call them through browser-callable services. You need a REST API when other systems have to access the data of your application.

[REST API Alongside Vaadin](https://vaadin.com/docs/next/building-apps/integration/rest-api.md) shows how to expose REST endpoints, either from a separate artifact or from the same module as your views. It also shows how to configure security so that the endpoints and the views can coexist.

When your application calls other systems, make the calls from [application services](https://vaadin.com/docs/next/building-apps/business-logic/add-service.md). This keeps the integration out of your views, like the rest of the application layer. [Call a Remote Service](https://vaadin.com/docs/next/building-apps/integration/call-remote-services.md) shows how to call a REST service with timeouts and error handling, and what to take into account when passing the access token of the user.

## <a id="messaging"></a>Messaging

These guides don’t cover message brokers, such as Apache Kafka or RabbitMQ. See the [Messaging](https://docs.spring.io/spring-boot/reference/messaging/index.html) section of the Spring Boot documentation, which covers both, and the documentation of [Spring for Apache Kafka](https://docs.spring.io/spring-kafka/reference/).

A message listener runs in a thread of the messaging client, outside of any user’s request. It has no current UI and no Spring Security context, like the background threads described in [Threads and the Session Lock](https://vaadin.com/docs/next/building-apps/architecture/runtime-model.md#threads-and-the-session-lock). To show the result of a message to users, update a signal or use `UI.access()`, as described in [Pushing UI Updates](https://vaadin.com/docs/next/building-apps/server-push/updates.md).

## <a id="topics"></a>Topics

- [REST API](https://vaadin.com/docs/next/building-apps/integration/rest-api.md): Integration of REST API within the Vaadin application.
- [Remote Services](https://vaadin.com/docs/next/building-apps/integration/call-remote-services.md): Learn how to call other systems over HTTP from the application services of a Vaadin application.
