Pheign Library
Pheign library makes writing php http client easier., (*1)
(inspired by OpenFeign/feign), (*2)
Installation
Library can be installed with Composer. Installation is quite easy:, (*3)
$ composer require airmanbzh/pheign
Composer will install the library to your project's vendor/airmanbzh/pheign directory., (*4)
Usage
To make a request, you have to :, (*5)
Create a request class
<?php
namespace test;
use pheign\annotation\method\GET;
use pheign\annotation\Options;
use pheign\annotation\Pheign;
use pheign\annotation\Target;
class Github
{
/**
* @Pheign
*
* @GET
* @Target("/users/{owner}/repos")
*
* @Options(CURLOPT_SSL_VERIFYHOST=0, CURLOPT_SSL_VERIFYPEER=0)
*/
public function repositories($owner){}
/**
* @Pheign
*
* @GET
* @Target("/repos/{owner}/{repo}")
*
* @Options(CURLOPT_SSL_VERIFYHOST=0, CURLOPT_SSL_VERIFYPEER=0)
*/
public function repositoryInformations($owner, $repo){}
}
Make a request
// Initialisation de pheign
$pheign = \pheign\builder\Pheign::builder()->target(\test\Github::class, 'https://api.github.com');
$result = $pheign->repositories('airmanbzh');
echo('
' . htmlentities($result) . '
');
$result = $pheign->repositoryInformations('airmanbzh', $repo);
echo('
' . htmlentities($result) . '
');
Annotations
Method
Namespace : pheign\annotation\method...
Define request method, (*6)
@GET, @POST, @PUT, @DELETE, (*7)
Target
Namespace : pheign\annotation\Target, (*8)
Request endpoint, (*9)
@Target("/search/{id}")
Namespace : pheign\annotation\Headers, (*10)
Define a custom header, (*11)
@Headers({"Content-Type : application/json", "Accept-Charset: utf-8"})
Datas
Namespace : pheign\annotation\Datas, (*12)
@Datas(myDatas="{datas}", myId="{id}")
Options
Namespace : pheign\annotation\Options, (*13)
@Options(CURLOPT_SSL_VERIFYHOST=0, CURLOPT_SSL_VERIFYPEER=0)
<?php
$loader = require_once(__DIR__ . '/../vendor/autoload.php');
$applicationAspectKernel = \pheign\kernel\PheignKernel::getInstance();
$applicationAspectKernel->init(array(
'debug' => true,
'appDir' => __DIR__ . '/../private', // The directory where you find your request class
'cacheDir' => __DIR__ . '/../cache',
'excludePaths' => array(
__DIR__ . '/../vendor'
)
));
More about Goaop and its configuration : goaop/framework, (*14)