psr.http-client-implementat.../README.md

116 lines
3.1 KiB
Markdown
Raw Normal View History

2021-05-21 13:00:17 +03:00
# Fallback for `psr/http-client-implementation` using `php-http-curl`
Provides a metapackage for library needing `psr/http-client-implementation`
that fallback to a default implementation when user does not meet
the initial requirements.
## Usage
```shell
composer require "Neur0toxine/psr.http-client-implementation.php-http-curl:*"
```
Composer will, by preference:
- use an implementation provided by the user
- otherwise, fallbacks to `php-http/curl-client`
## How does it works
This package contains 2 versions:
1. The highest [1.1](https://github.com/Neur0toxine/psr.http-client-implementation.php-http-curl/blob/1.1/composer.json) needs nothing more than your requirements.
1. The lowest [1.0](https://github.com/Neur0toxine/psr.http-client-implementation.php-http-curl/blob/1.0/composer.json) triggers install of `php-http/curl-client`.
Composer will choose this highest version when user already has a package that satisfy `psr/http-client-implementation`.
Otherwise, composer will choose the lowest version and in that case will
download the following packages: `php-http/curl-client`.
## What problem does it solve?
You are maintaining a library that need an implementation of `psr/http-client-implementation`,
but you don't want requiring a specific implementation.
ie. You are maintainer of library that use the following composer.json
```json
{
"name": "acme/lib",
"require": {
"psr/http-client-implementation": "^1.0",
}
}
```
When end users requires you library with the following code
```json
{
"name": "end-user/app",
"require": {
"acme/lib": "^1.0"
}
}
```
They probably ends with such error
```shell
composer up
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for acme/lib ^1.0 -> satisfiable by acme/lib[1.0].
- acme/lib 1.0 requires psr/http-client-implementation ^1.0 -> no matching package found.
```
You can ask user to install a random package, it works, but the DX is very bad,
and confusing at first.
By using `Neur0toxine/psr.http-client-implementation.php-http-curl`,
users will be able to require their preferred implementation
or fallback to your default choice
### Example of user that meet the preferred requirements
```json
{
"name": "end-user/app",
"require": {
"acme/lib": "^1.0",
"third-party/provide-implementation": "^1.0"
}
}
```
```shell
composer up
...
Package operations: 2 installs, 0 updates, 0 removals
- Installing acme/lib (1.0)
- Installing Neur0toxine/psr.http-client-implementation.php-http-curl (1.1)
```
### Example of user that fallback to your recommendations
```json
{
"name": "end-user/app",
"require": {
"acme/lib": "^1.0"
}
}
```
```shell
composer up
...
Package operations: 3 installs, 0 updates, 0 removals
- Installing acme/lib (1.0)
- Installing Neur0toxine/psr.http-client-implementation.php-http-curl (1.0)
- Installing php-http/curl-client (1.0)
```
## Contributing
This repository is automatically generated. If you want contributing and
submitting an issue or a Pull Request, please use
[composer-fallback/generator](https://github.com/composer-fallback/generator).