Zuul, which like the service discovery tool Eureka and the fault tolerance library Hystrix is part of Netflix’ cloud orchestration stack, is a reverse proxy / API gateway.
A reverse proxy conceptually works like this:
A reverse proxy allows you to route requests to a single domain to multiple backing services behind that proxy. This can be conducive in situations where you want to break up your application into several loosely-coupled components that externally, that is facing the user, nonetheless act as if they were one single application, quite possibly including a single sign-on mechanism.
Like the other parts of the Netflix stack Zuul works exceptionally well together with Spring Cloud and Spring Boot. It’s a toolkit that allows to treat reverse proxy infrastructure as code.
To help others getting started with this useful tool I’ve put together a Zuul demo with Spring Boot that exemplifies some simple reverse proxy use cases and how to implement them with Zuul.
The various filters and the test code verifying these probably are particularly interesting because they show how to implement common patterns such as enriching or modifying HTTP request and response headers at different stages of the HTTP request-response cycle.
This article from the Zuul wiki illustrates Zuul filters and the Zuul lifecycle in more detail.