A curated list of mature interfaces to build components on.
Good interfaces behave like a contract, a promise, a documentation. They don't have an opinion about the internals of a concrete implementation. So you can use interfaces while building huge applications to decouple different parts and hopefully gain a much better level of reusability, interchangeability and maintainability.
Rules:
- A project must only consist of interfaces that have the character of a contract.
- The project must ship a good documentation.
- The project could include one or more implementations.
- The project's documentation must use english language.
- The interface(s) must comply with PSR-1.
- The interface(s) should comply with PSR-12.
- There should exist implementations that show the practical benefit of the offered interface(s).
- The project should be available through Packagist.
(Click on an item to get a list of available implementations)
Project | Packagist | Status |
---|---|---|
adammbalogh/key-value-store | Draft | |
rkr/php-ioc-contract | Draft |
- illuminate/contracts – Subtree split of the Illuminate Contracts component (see laravel/framework)
- HttpKernelInterface – HttpKernelInterface handles a Request to convert it to a Response.
- FlySystem – Flysystem is a filesystem abstraction which allows you to easily swap out a local filesystem for a remote one. Reducing technical debt and chance of vendor lock-in.
- 3rd Party APIs (Amazon, Google etc)
- Authentication
- (More) Communication (Email, Sms, Notifications etc.)
- (More) Date-, Time-, Interval-, Calendar-Manipulation
- (More) Dependency-Injection-Container interfaces with more methods (make, call etc.)
- E-Commerce (Payment, common order structures, common address structures etc.)
- FileSystem-Abstraction
- Filetype-Abstraction
- Filtering
- Image-Manipulation
- Key-Value-Stores
- ORM / Data-Handling / Data-Structures
- Queues (like RabbitMQ / Gearman)
- Search-Server-Interfaces (querying, Responses, Facettes etc)
- Template-Engines
- URL-Manipulation
- Validation