decodelabs / hydro
Simple PSR18 HTTP client wrapper around Guzzle
v0.2.0
2025-08-21 16:09 UTC
Requires
- php: ^8.4
- decodelabs/atlas: ^0.14.1
- decodelabs/coercion: ^0.3.5
- decodelabs/exceptional: ^0.6.3
- decodelabs/kingdom: ^0.1
- guzzlehttp/guzzle: ^7.9.3
- psr/http-client: ^1.0.3
- psr/http-message: ^2.0
Requires (Dev)
- decodelabs/collections: ^0.12
- decodelabs/phpstan-decodelabs: ^0.7
Suggests
- decodelabs/collections: Fetch JSON files over HTTP as Tree
Conflicts
- decodelabs/collections: <0.12
README
Simple HTTP client wrapper around Guzzle
Hydro provides a simple interface to common HTTP client functionality using Guzzle under the hood.
Installation
Install via Composer:
composer require decodelabs/hydro
Usage
Basic usage for different types of files:
use DecodeLabs\Hydro; use DecodeLabs\Monarch; $hydro = Monarch::getService(Hydro::class); $memoryFile = $hydro->get('https://example.com/file.txt'); // Atlas file $string = $hydro->getString('https://example.com/file.txt'); // String $file = $hydro->getFile('https://example.com/file.txt', '/path/to/save/file.txt'); // Local file $tempFile = $hydro->getTempFile('https://example.com/file.txt'); // Temp file $json = $hydro->getJson('https://example.com/file.json'); // Decoded JSON array $tree = $hydro->getJsonTree('https://example.com/file.json'); // Decoded JSON Collections/Tree
Options
Pass an array of options (including URL) to the underlying client:
$hydro->get([ 'url' => 'https://example.com/file.txt', 'timeout' => 10 ]);
Errors
Handle error status responses (or return alternative response):
$file = $hydro->get('https://example.com/file.txt', function($response) { switch($response->getStatusCode()) { case 404: throw Exceptional::Notfound( message: 'File not found' ); case 500: throw Exceptional::Runtime( message: 'Server error' ); default: return $hydro->request('GET', 'https://example.com/other.txt'); } });
Licensing
Hydro is licensed under the proprietary License. See LICENSE for the full license text.