An example project using API Platform 3 following the hexagonal architecture.
This example has been explained during the SymfonyLive Paris 2022 (slides).
If you wan't to try to use and tweak that example, you can follow these steps:
- Run
git clone https://github.com/mtarld/apip-ddd
to clone the project - Run
docker-compose build --pull --no-cache
to build fresh images - Run
docker-compose up
to up your containers - Visit https://localhost and play with your app!
As API platform 3 isn't released yet, that repository is using the dev-main
branch of api-platform/core
.
As soon as API Platform is released (it should happen very soon), the v3
tag must be targetterd and the minimum-stability
must be updated.
Following links aim to explain the architecture of the project and the purpose of each classes.
- Layers (TODO)
- Domain layer
- Models and repositories (TODO)
- Application layer
- The command/query pattern (TODO)
- Infrastructure layer
- API Resource (TODO)
- Custom operation metadata (TODO)
- Query providers
- Command processors (WIP)
- CRUD providers/processors (TODO)
- Command data transformers (TODO)
- Openapi filters (TODO)
- Native providers/processors removal compiler pass
- Messenger buses (TODO)
That implementation is pragmatic and far for being uncriticable. It's mainly an conceptual approach to extend API Platform in order to defer operations to command and query buses.
It could and should be improved, therefore feel free to submit issues and pull requests if something isn't relevant to your use cases or isn't clean enough.
Mathias Arlaud with the help of Robin Chalas