Це спільні інтерфейси PHP-FIG для роботи з HTTP. Вони дозволяють бібліотекам не залежати від конкретного фреймворку чи HTTP-клієнта:
- PSR-7 - інтерфейси HTTP-повідомлень:
RequestInterface,ResponseInterface,UriInterface, потоки. Об'єкти незмінні:withHeader()повертає нову копію. - PSR-17 - фабрики для створення цих об'єктів, щоб бібліотека не викликала
newконкретного класу. - PSR-15 - серверні обробники й middleware:
RequestHandlerInterface,MiddlewareInterface. - PSR-18 - HTTP-клієнт:
ClientInterface::sendRequest().
final class GithubApi
{
public function __construct(
private ClientInterface $http, // Guzzle, Symfony HttpClient...
private RequestFactoryInterface $requests,
) {}
}
Що це дає:
- SDK пише код один раз, а застосунок підставляє клієнт, який уже використовує.
- Middleware, написане за PSR-15, працює в Slim, Mezzio та інших PSR-сумісних фреймворках.
- У тестах легко підставити фейковий клієнт.
Laravel використовує власні класи Request/Response на базі Symfony HttpFoundation, а не PSR-7. Але конвертувати можна (пакет symfony/psr-http-message-bridge), а Guzzle під HTTP-клієнтом Laravel реалізує PSR-18.