json-client
, (*1)
A simple client for JSON APIs using Guzzle and the Symfony
Serializer., (*2)
To implement a API client, you can extend AbstractApiClient
and write your methods, using the Guzzle Http Client to transmit., (*3)
class MyClient extends AbstractApiClient {
/**
* @throws TransferException
*/
public function send(Model $model):void
{
// The data will automatically be
// serialized to JSON.
$this->http->post('model', [
'data' => $model
]);
}
/**
* @param int $id
* @throws TransferException
* @returns Model
*/
public function get(int $id):Model
{
$response = $this->http->get('model/'.$id, [
'deserialize_to' => Model::class
]);
if (!$response instanceof DeserializedResponse) {
throw new \RuntimeException('Expected a DeserializedResponse, got: '.get_class($response));
}
return $response->getDeserializedData();
}
}
All functionality is implemented as middleware, the
AbstractApiClient
just configures the Guzzle HandlerStack
for you., (*4)
Provided middleware
Serialization
See DeserializeResponseMiddleware
and SerializeRequestBodyMiddleware
., (*5)
Server error messages
ServerMessageMiddleware
provides support for JSON error messages., (*6)
Response expectations
If you want to make sure that a response has a specific header, content
type or other feature, use ResponseExpectationMiddleware
., (*7)
Logging
There is also middleware to log all HTTP requests (and corresponding
response or exception), see HttpLoggingMiddleware
, (*8)
An adapter for Psr\Log\LoggerInterface
is available., (*9)
This middleware is not added by default because the order is
important: The HttpLoggingMiddleware
must be added last., (*10)