bitandblack / request-cache
Smooth caching of HTTP requested data. It runs non-blocking and uses background processes to request the data.
Requires
- php: >=7.4
- ext-json: *
- bitandblack/composer-helper: ^1.0
- bitandblack/duration: ^1.0
- bitandblack/pathinfo: ^1.0
- guzzlehttp/guzzle: ^7.2
- laravel/serializable-closure: ^1.1
- psr/http-client: ^1.0
- psr/log: ^1.0 || ^2.0 || ^3.0
- psr/simple-cache: ^1.0
- symfony/finder: ^5.0 || ^6.0 || ^7.0
Requires (Dev)
- bitandblack/helpers: ^1.8 || ^2.0
- monolog/monolog: ^2.0 || ^3.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.5
- rector/rector: ^1.0
- symfony/process: ^6.0 || ^7.0
- symplify/easy-coding-standard: ^12.0
README
Request Cache
Smooth caching of HTTP requested data. It runs non-blocking and uses background processes to request the data.
Installation
This library is available for the use with Composer. Add it to your project by running $ composer require bitandblack/request-cache
.
Usage
At first initialize a cache type and a process object, and use them to initialize the request handler object. In this example we're going to use the FileSystemCache
:
<?php
use BitAndBlack\RequestCache\CacheType\FileSystemCache;
use BitAndBlack\RequestCache\Process;
use BitAndBlack\RequestCache\RequestHandler;
$cache = new FileSystemCache(__DIR__);
$process = new Process();
$requestHandler = new RequestHandler($cache, $process);
The request handler is now ready to be used. Now create a request object with the URL you want to request and the time to live (ttl). This example requests the URL https://www.bitandblack.com
and allows the data to be stored for 1 hour:
<?php
use BitAndBlack\RequestCache\Request;
$request = new Request(
'https://www.bitandblack.com',
3600
);
The data can be requested now:
<?php
$response = $requestHandler->getResponse($request);
The request handler will return the response immediately and without blocking the script. If the data has been expired, the last response will be returned from cache, while the new data will be requested in the background.
When successful, the response will be a GuzzleHttp\Psr7\Response
object, that implements the Psr\Http\Message\ResponseInterface
.
Options
Custom request client
Per default, this library uses Guzzle to make requests. You can use the request callback to set up a custom request client or to modify the configuration.
<?php
use GuzzleHttp\Client;
use Psr\Http\Message\ResponseInterface;
$cache->setRequestCallback(
function(string $url): ResponseInterface
{
$client = new Client();
return $client->request(
'GET',
$url,
[
'allow_redirects' => false
]
);
}
);
TTL
The ttl
value may be easier to set with the help of the bitandblack/duration library. For example instead of writing 86400
for the duration of a whole day, you can write Duration::createFromDays(1)->getSeconds()
then.
Help
If you have any questions, feel free to contact us under hello@bitandblack.com
.
Further information about Bit&Black can be found under www.bitandblack.com.