masnathan/api-caller

1.0.0 2017-07-21 10:14 UTC

README

Downloads with Composer SensioLabs Insight ReiDuKuduro @gittip

APIcaller is a class that helps you build API wrappers.
You don't have to worry about building URLs, or even about parsing the requested data.

How to use

You will have to extend the Client class and the Caller class, the Client will handle all the configuration to use on the requests and the Caller will be used as the interface to interact with the API.

use MASNathan\APICaller\Client;
use MASNathan\APICaller\Caller;

class MyPackageClient extends Client
{
    /**
     * Here you can set the default headers and parameters on a global scope
     */
    public function __construct($ip = null)
    {
        $this->setDefaultHeaders([
            'User-Agent' => 'PHP APICaller SDK',
            'Accept'     => 'application/json',
            'Token'      => '123456',
        ]);
        $this->setDefaultParameters([
            'ip' => $ip ?: '127.0.0.1',
        ]);
    }

    /**
     * Returns the API Endpoint
     *
     * @return string
     */
    public function getEndpoint()
    {
        return 'http://api.domain.com/v1/';
    }
}

class MyPackageCaller extends Caller
{
    public function requestSomething($foo, $bar)
    {
        $params = [
            'foo' => $foo,
            'bar' => $bar,
        ];

        // this will result in this url http://api.domain.com/v1/some-method.json?ip={$ip}&foo={$foo}&bar={$bar}
        $response = $this->client->get('some-method.json', $params);

        $data = $this->handleResponseContent($response, 'json');

        // Do something with your data

        return $data;
    }
}

Well, this is how you can start creating your class, now, lets make some calls!

$client = new MyPackageClient('8.8.8.8');
$caller = new MyPackageCaller($client);

$result = $caller->requestSomething(13, 37);

var_dump($result);

This will call the following url:http://api.domain.com/v1/some-method.json?ip=8.8.8.8&foo=13&bar=37.

Installation

To install the SDK, you will need to be using Composer in your project. If you don't have composer installed check this page and follow the installation steps

This library is not hard coupled to Guzzle or any other library that sends HTTP messages. It uses an abstraction called HTTPlug. This will give you the flexibility to choose what PSR-7 implementation and HTTP client to use.

To get started ASAP you should run the following command:

# Add APIcaller as a dependency
$ composer require masnathan/api-caller php-http/curl-client guzzlehttp/psr7

Why do I need to require all those packages?

APICaller depends on the virtual package php-http/client-implementation which requires to you install an adapter, but we do not care which one. That is an implementation detail in your application. We also need a PSR-7 implementation and a message factory.

You don't have to use the php-http/curl-client if you don't want to. Read more about the virtual packages, why this is a good idea and about the flexibility it brings at the HTTPlug docs.

License

This library is under the MIT License, see the complete license here