The following figure gives a zoomed-in view of the architectural elements that are relevant to our discussion of a web adapter—the adapter itself and the ports through which it interacts with our application core:
Figure 5.1: An incoming adapter talks to the application layer through dedicated incoming ports, which are interfaces implemented by the application services
The web adapter is a "driving" or "incoming" adapter. It takes requests from the outside and translates them into calls to our application core, telling it what to do. The control flow goes from the controllers in the web adapter to the services in the application layer.
The application layer provides specific ports through which the web adapter can communicate. The services implement these ports and the web adapter can call these ports.
If we look closer, we notice that this is the Dependency Inversion Principle in action. Since the control flow goes from left to...