Recommend this page to a friend! |
Download .zip |
Info | Documentation | View files (18) | Download .zip | Reputation | Support forum | Blog | Links |
Last Updated | Ratings | Unique User Downloads | Download Rankings | |||||
2023-01-18 (9 days ago) | Not yet rated by the users | Total: 35 This week: 11 | All time: 10,616 This week: 21 |
Version | License | PHP version | Categories | |||
apiz 1.0 | MIT/X Consortium ... | 5 | HTTP, PHP 5, Web services |
Description | Author | |
This package provides a base client class to send requests to a given API. |
APIZ is a PHP API Client Development Kit, it helps you to manage HTTP API call in OOP way. You can easily handle and isolate all kinds of REST API calls and their responses by using this package.
composer require nahid/apiz
There are no extra configurations for this package.
Lets see an example to consume API from https://reqres.in.
Suppose you need to create several API services for your project. Your service directory is
app/Services
. Now we are going to develop a service for https://reqres.in and make a class file ReqResApiService.php
which will extend \Apiz\AbstractApi
class.
namespace App\Services;
use Apiz\AbstractApi;
class ReqResApiService extends AbstractApi
{
protected function getBaseURL()
{
return 'https://reqres.in';
}
}
getBaseURL()
is an abstract method of the AbstractApi
class. You need to override this method to set the proper base URL for your API.
Few APIs have a common prefix in their URL. Like, here reqres.in
have a prefix api
on every endpoint.
So, we'll override the getPrefix()
method to define the Prefix.
namespace App\Services;
use Apiz\AbstractApi;
class ReqResApiService extends AbstractApi
{
protected function getBaseURL()
{
return 'https://reqres.in';
}
protected function getPrefix()
{
return 'api';
}
}
Now let's make a method to get all users info.
namespace App\Services;
use Apiz\AbstractApi;
class ReqResApiService extends AbstractApi
{
protected function getBaseURL()
{
return 'https://reqres.in';
}
protected function getPrefix()
{
return 'api';
}
public function getAllUsers()
{
$response = $this->get('users');
if ($response->getStatusCode() === 200) {
return $response()->toArray();
}
return [];
}
}
So, we are basically making a GET
request to the URL https://reqres.in/api/users
.
See, how easy it is to manage an API now?
Let's see another example.
public function createUser(array $data)
{
$response = $this->withFormParams($data)
->post('create');
if ($response->getStatusCode() === 201) {
return $response()->toArray();
}
return null;
}
Sometimes we need to bind some headers with all the requests. Suppose if you want to deal with the Github API, you have to send access_token
in every request with the headers.
So APIZ provide you a handy way to deal with this problem. Just override AbstractApi::getDefaultHeaders()
.
protected function getDefaultHeaders()
{
return [
'access_token' => $_ENV['GITHUB_ACCESS_TOKEN'],
];
}
Cool, right?
You can easily use all HTTP verbs like get
, post
etc. It's totally hassle free.
See more examples in the Examples Folder.
Sometimes we receive huge payload as a response from the APIs. It's quite daunting to parse proper data from that big payload.
No worries! We're using a powerful Query parser, named QArray by default to parse and query over the Response data.
Let's see how we can use this parser to parse the response we got for getAllUsers
method from our previous example.
public function getFirstUser()
{
$users = $this->get('users');
return $users->query()->from('data')->first();
}
We're getting list of users in the data
key in the response. From that we're collecting the first data.
See, how easy it is!
You can find detail usage of the QArray here.
Additionally, there is a secret sauce for you.
If you don't want to query like: $users->query()
, you can just do it like this: $users()
. That means the response object is invokable and behave exactly like calling the query()
method.
You're welcome. :D
By default we are using Guzzle
as our HTTP Client. But you are not bound to use this. You can easily use your own PSR7 supported HTTP Client with Apiz
.
Just pass an instance of your HTTP Client to our setClient()
method.
See an example here.
Here is our GuzzleClient to get an idea how your Client should look like:
<?php
namespace Apiz\Http\Clients;
use Apiz\Http\AbstractClient;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Psr7\Uri;
use GuzzleHttp\Exception\GuzzleException;
use Psr\Http\Message\ResponseInterface;
// Your client must extend the `AbstractClient`
class GuzzleClient extends AbstractClient
{
public function getRequestClass()
{
// Return the Request class name of your PSR7 supported Client
// This Request class must implement the Psr\Http\Message\RequestInterface
return Request::class;
}
public function getResponseClass()
{
// Return the Response class name of your PSR7 supported Client
// This Response class must implement the Psr\Http\Message\ResponseInterface
return Response::class;
}
public function getUriClass()
{
// Return the Uri class name of your PSR7 supported Client
// This Uri class must implement the Psr\Http\Message\UriInterface
return Uri::class;
}
/
* @param mixed ...$args
* @return ResponseInterface
* @throws GuzzleException
*/
public function send(...$args)
{
// In this method, implement how your Client execute the Request sending
$client = new Client();
return $client->send(... $args);
}
}
Feel free send feedback and issues. Contributions to improve this package is most welcome too.
Files |
File | Role | Description | ||
---|---|---|---|---|
src (3 files, 5 directories) | ||||
Tests (1 directory) | ||||
composer.json | Data | Auxiliary data | ||
LICENSE | Lic. | License text | ||
readme.md | Doc. | Read me |
Files | / | src |
File | Role | Description | ||
---|---|---|---|---|
Constants (1 file) | ||||
Exceptions (3 files) | ||||
Http (2 files, 1 directory) | ||||
Traits (1 file) | ||||
Utilities (1 file) | ||||
AbstractApi.php | Class | Class source | ||
HttpExceptionReceiver.php | Class | Class source | ||
QueryBuilder.php | Class | Class source |
Files | / | src | / | Exceptions |
File | Role | Description |
---|---|---|
ClientNotDefinedException.php | Class | Class source |
InvalidResponseClassException.php | Class | Class source |
NoResponseException.php | Class | Class source |
Files | / | src | / | Http |
File | Role | Description | ||
---|---|---|---|---|
Clients (2 files) | ||||
Request.php | Class | Class source | ||
Response.php | Class | Class source |
Files | / | src | / | Http | / | Clients |
File | Role | Description |
---|---|---|
AbstractClient.php | Class | Class source |
GuzzleClient.php | Class | Class source |
Files | / | Tests | / | Feature |
File | Role | Description | ||
---|---|---|---|---|
Mocks (1 file) | ||||
BasicHTTPRequestsTest.php | Class | Class source |
Version Control | Unique User Downloads | Download Rankings | |||||||||||||||
100% |
|
|
Applications that use this package |
If you know an application of this package, send a message to the author to add a link here.