Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/brightfish-be/caching-guzzle
Cache HTTP responses through Guzzle middleware
https://github.com/brightfish-be/caching-guzzle
cache guzzle http-cache laravel middleware
Last synced: about 13 hours ago
JSON representation
Cache HTTP responses through Guzzle middleware
- Host: GitHub
- URL: https://github.com/brightfish-be/caching-guzzle
- Owner: brightfish-be
- License: gpl-3.0
- Created: 2019-03-11T15:27:27.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-05-09T09:17:38.000Z (6 months ago)
- Last Synced: 2024-08-10T05:05:28.086Z (3 months ago)
- Topics: cache, guzzle, http-cache, laravel, middleware
- Language: PHP
- Homepage:
- Size: 85.9 KB
- Stars: 10
- Watchers: 3
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# HTTP caching middleware for Guzzle
[![Tests](https://github.com/brightfish-be/caching-guzzle/workflows/Tests/badge.svg?event=push&style=flat-square)](https://github.com/brightfish-be/caching-guzzle/actions)
[![Latest Version on Packagist](https://img.shields.io/packagist/v/brightfish/caching-guzzle.svg?style=flat-square&label=Version)](https://packagist.org/packages/brightfish/caching-guzzle)
[![Downloads](https://img.shields.io/packagist/dt/brightfish/caching-guzzle?label=Downloads&style=flat-square)](https://packagist.org/packages/brightfish/caching-guzzle)Simple and transparent HTTP response caching middleware for [Guzzle](https://github.com/guzzle/guzzle/),
works well with [Laravel](https://github.com/laravel) or with any caching library
implementing the [PSR-16 caching interface](https://www.php-fig.org/psr/psr-16/).## Installation
You can install the library with Composer: ```composer require brightfish/caching-guzzle```## How to use
The registration of the middleware follows [Guzzle's documentation](http://docs.guzzlephp.org/en/stable/handlers-and-middleware.html#handlers):```php
/** @var \Psr\SimpleCache\CacheInterface $cache */
$cache = app('cache')->store('database'); // Laravel example, but any PSR-16 cache will do$middleware = new \Brightfish\CachingGuzzle\Middleware($cache);
$stack = \GuzzleHttp\HandlerStack::create();
$stack->push($middleware);
$client = new \GuzzleHttp\Client([
'handler' => $stack,
'base_uri' => 'https://example.org/api/'
]);
```### Instantiation parameters
Next to a PSR-16 compliant cache, the middleware takes two optional parameters:
- `$ttl`, the default cache duration, which can be overridden by each request
- `$log`, instructs the package to log cache hits Laravel's log or PHP's default `error_log` (see [source](https://github.com/brightfish-be/caching-guzzle/blob/c0e96ae157b4e17363eb76ee5996995fbf0bd4a5/src/Middleware.php#L168)).```php
$middleware = new \Brightfish\CachingGuzzle\Middleware($store, $ttl = 60, $log = true);
```## Making requests
**Available options:**
| Option | Type | Default | Description |
|:-------|------|---------|:------------|
|`cache` | bool | `true` | Completely disable the cache for this request |
|`cache_anew` | bool | `false` | Bypass the cache and replace it with the new response |
|`cache_ttl` | int | `60` | Cache duration in seconds, use `-1` to cache forever |
|`cache_key` | string | `true` | Cache key to override the default one based on the request URI (see [Cache retrieval](https://github.com/brightfish-be/caching-guzzle#cache-retrieval)) |### Example: cache the response for 90s (default: 60)
```php
$response_1 = $guzzleClient->get('resource', [
'cache_ttl' => 90
]);
```
### Example: request anew and update the cache
```php
$response_3 = $guzzleClient->post('resource/84', [
'cache_anew' => true
]);
```
### Example: disable caching
```php
$response_2 = $guzzleClient->post('resource/84', [
'cache' => false
]);
```
### Example: cache forever with a custom key
```php
$response_4 = $guzzleClient->post('resource/84', [
'cache_key' => 'my-key',
'cache_ttl' => -1
]);
```
If `cache_ttl` is set to `0` the response will not be cached, but, contrary to `'cache' => false`, it may be retrieved from it.## Example: cache retrieval
```php
# Get response_1 from cache.
$cached_response_1 = $cache->get('//example.org/api/resource');# Get response_4 from cache.
$cached_response_4 = $cache->get('my-key');
```## Using the wrapper
Instead of manually configuring Guzzle's client and the caching middleware, it is also possible to instantiate the `Client` class provided by this package. This way, the binding of the middleware is done for you.```php
use Brightfish\CachingGuzzle\Client;/** @var \Psr\SimpleCache\CacheInterface $store */
$psrCompatibleCache = new Cache();$client = new Client($psrCompatibleCache, [
'cache_ttl' => 60, // default cache duration
'cache_log' => false, // log the cache hits
// Guzzle options:
'base_uri' => 'https://example.org/api/'
// ...
]);
```## Contributing
Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.
## Security Vulnerabilities
Please review [our security policy](../../security/policy) on how to report security vulnerabilities.
## Credits
- [dotburo](https://github.com/dotburo)
- [Peter Forret](https://github.com/pforret)
- [All Contributors](../../contributors)## License
GNU General Public License (GPL). Please see the [license file](LICENSE.md) for more information.