Chapter 3. Foundation
In this chapter, we’re going to lay the foundation for developing cloud native microservice applications. First we’ll focus on how to implement the business logic in plain Java with as little coupling to framework-specific APIs as possible. We will then look at the edges of the applications that communicate with other applications and databases. We’ll see how to persist our business objects and how to implement HTTP-based services.
When it comes to implementing the communication boundaries, there are two main approaches to developing cloud native microservices: contract-first and implementation-first. With contract-first, the service API (the contract) is defined—for example, through Swagger or OpenAPI—and then used to generate the service implementation skeleton. With implementation-first, the service is implemented and then the contract generated (e.g., though runtime- or tools-based OpenAPI generation). Both are valid approaches, but we mainly see developers using implementation-first, which is the approach taken in this chapter.
Rapidly Developing Service Implementations
Let’s dive into implementation with an example application based on a coffee shop. The first aspect enterprise developers should focus on is implementing the business logic—not on cross-cutting concerns, integration, observability, or anything else for now, but only on what adds value to the application and its users. In other words, at the core of our microservices we start from a plain ...