PHP Classes

PHP API Client with Guzzle: Send HTTP requests to API servers using Guzzle

Recommend this page to a friend!
  Info   View files Documentation   View files View files (21)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2024-03-28 (23 days ago) RSS 2.0 feedNot enough user ratingsTotal: 23 This week: 1All time: 11,154 This week: 69Up
Version License PHP version Categories
api-client 1.0MIT/X Consortium ...8HTTP, Web services, PHP 8
Description 

Author

This package can send HTTP requests to API servers using Guzzle.

It can take as parameters to send requests to an HTTP server that serves responses to an API that defines the base API URL, an API key, and a local path for storing cache files.

The package can send requests to the API HTTP server by passing the API call-specific URI, the method, and other parameters of the HTTP requests, like the request's content type and what the application accepts as responses, redirection support, etc...

Picture of Eric Sizemore
  Performance   Level  
Name: Eric Sizemore <contact>
Classes: 15 packages by
Country: United States United States
Innovation award
Innovation award
Nominee: 4x

Winner: 1x

Documentation

Esi\Api - A simple wrapper/builder using Guzzle for base API clients.

Build Status Code Coverage Scrutinizer Code Quality Tests PHPStan

Latest Stable Version Downloads per Month License

About

Documentation will be a bit lackluster, and the unit tests need a lot of work. With that being said, I created this library more for use in my own projects that center around an API service; to decouple a lot of the logic that would be repeated in each API service library, to its own library.

It has a long way to go, but it should be relatively stable.

Features

  • Builds around guzzle/guzzle as the HTTP Client.
  • Cache's requests via Kevinrob/guzzle-cache-middleware.
  • Can retry requets on a connection or server error via the Guzzle Retry Middleware. * `Client::enableRetryAttempts()` to instruct the client to attempt retries. * `Client::disableRetryAttempts()` to disable attempt retries. * `Client::setMaxRetryAttempts()` to set the maximum number of retries.
  • Can pass along headers in `Client::build()` to be 'persistent' headers, i.e. headers sent with every request.
  • One function that handles sending a request: `Client::send()`

It currently does not support async requests and pooling. Just your regular, good 'ol, standard requests.

Example

use Esi\Api\Client;

// api url, api key, cache path, does the api require key sent as a query arg, the name of the query arg
$client = new Client('https://myapiurl.com/api', 'myApiKey', '/var/tmp', true, 'api_key');

// Must first 'build' the client with (optional) $options array which can include any valid Guzzle option.
$client->build([
    'persistentHeaders' => [
        'Accept' => 'application/json',
    ],
    'allow_redirects' => true,
    // ... etc.
]);
$client->enableRetryAttempts();
$client->setMaxRetryAttempts(5);

$response = $client->send('GET', '/', ['query' => ['foo' => 'bar']]);

// Decode the json and return as array
$data = $client->toArray($response);

// or... as an object
$data = $client->toObject($response);

// or... for the raw json response, to do with as you will
$data = $client->raw(); // or $response->getBody()->getContents()

Requirements

  • PHP 8.2.0 or above.

Submitting bugs and feature requests

Bugs and feature requests are tracked on GitHub

Issues are the quickest way to report a bug. If you find a bug or documentation error, please check the following first:

  • That there is not an Issue already open concerning the bug
  • That the issue has not already been addressed (within closed Issues, for example)

Contributing

Esi\Api accepts contributions of code and documentation from the community. These contributions can be made in the form of Issues or Pull Requests on the Esi\Api repository.

Esi\Api is licensed under the MIT license. When submitting new features or patches to Esi\Api, you are giving permission to license those features or patches under the MIT license.

Esi\Api tries to adhere to PHPStan level 9 with strict rules and bleeding edge. Please ensure any contributions do as well.

Guidelines

Before we look into how, here are the guidelines. If your Pull Requests fail to pass these guidelines it will be declined, and you will need to re-submit when you?ve made the changes. This might sound a bit tough, but it is required for me to maintain quality of the code-base.

PHP Style

Please ensure all new contributions match the PSR-12 coding style guide. The project is not fully PSR-12 compatible, yet; however, to ensure the easiest transition to the coding guidelines, I would like to go ahead and request that any contributions follow them.

Documentation

If you change anything that requires a change to documentation then you will need to add it. New methods, parameters, changing default values, adding constants, etc. are all things that will require a change to documentation. The change-log must also be updated for every change. Also, PHPDoc blocks must be maintained.

Documenting functions/variables (PHPDoc)

Please ensure all new contributions adhere to: * PSR-5 PHPDoc * PSR-19 PHPDoc Tags

when documenting new functions, or changing existing documentation.

Branching

One thing at a time: A pull request should only contain one change. That does not mean only one commit, but one change - however many commits it took. The reason for this is that if you change X and Y but send a pull request for both at the same time, we might really want X but disagree with Y, meaning we cannot merge the request. Using the Git-Flow branching model you can create new branches for both of these features and send two requests.

Author

Eric Sizemore - <admin@secondversion.com> - <https://www.secondversion.com>

License

Esi\Api is licensed under the MIT License - see the LICENSE.md file for details


  Files folder image Files  
File Role Description
Files folder image.github (2 files, 1 directory)
Files folder imagesrc (2 files, 2 directories)
Files folder imagetests (1 directory)
Accessible without login Plain text file .php-cs-fixer.dist.php Example Example script
Accessible without login Plain text file .scrutinizer.yml Data Auxiliary data
Accessible without login Plain text file CHANGELOG.md Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login Plain text file LICENSE.md Lic. License text
Accessible without login Plain text file phpstan.neon Data Auxiliary data
Accessible without login Plain text file phpunit.xml Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation
Plain text file rector.php Class Class source
Accessible without login Plain text file renovate.json Data Auxiliary data
Accessible without login Plain text file SECURITY.md Data Auxiliary data

  Files folder image Files  /  .github  
File Role Description
Files folder imageworkflows (2 files)
  Accessible without login Plain text file dependabot.yml Data Auxiliary data
  Accessible without login Plain text file FUNDING.yml Data Auxiliary data

  Files folder image Files  /  .github  /  workflows  
File Role Description
  Accessible without login Plain text file main.yml Data Auxiliary data
  Accessible without login Plain text file tests.yml Data Auxiliary data

  Files folder image Files  /  src  
File Role Description
Files folder imageExceptions (1 file)
Files folder imageTraits (1 file)
  Plain text file Client.php Class Class source
  Plain text file Utils.php Class Class source

  Files folder image Files  /  src  /  Exceptions  
File Role Description
  Plain text file RateLimitExceededException.php Class Class source

  Files folder image Files  /  src  /  Traits  
File Role Description
  Plain text file ParseJsonResponse.php Class Class source

  Files folder image Files  /  tests  
File Role Description
Files folder imagesrc (1 file)

  Files folder image Files  /  tests  /  src  
File Role Description
  Plain text file ClientTest.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:23
This week:1
All time:11,154
This week:69Up