Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/timostamm/json-client

A simple client for JSON APIs using Guzzle and the Symfony Serializer.
https://github.com/timostamm/json-client

api guzzle http json serializer symfony

Last synced: about 1 month ago
JSON representation

A simple client for JSON APIs using Guzzle and the Symfony Serializer.

Awesome Lists containing this project

README

        

# json-client

[![build](https://github.com/timostamm/json-client/workflows/CI/badge.svg)](https://github.com/timostamm/json-client/actions?query=workflow:"CI")
![Packagist PHP Version](https://img.shields.io/packagist/dependency-v/timostamm/json-client/php)
[![GitHub tag](https://img.shields.io/github/tag/timostamm/json-client?include_prereleases=&sort=semver&color=blue)](https://github.com/timostamm/json-client/releases/)
[![License](https://img.shields.io/badge/License-MIT-blue)](#license)

A simple client for JSON APIs using Guzzle and the Symfony
Serializer.

To implement a API client, you can extend AbstractApiClient
and write your methods, using the Guzzle Http Client to transmit.

```PHP
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
{
return $this->http->get('model/'.$id, [
'deserialize_to' => Model::class
]);
}

}
```

All functionality is implemented as middleware, the
`AbstractApiClient` just configures the Guzzle `HandlerStack` for you.

### Provided middleware

#### Serialization

See `DeserializeResponseMiddleware` and `SerializeRequestBodyMiddleware`.

#### Server error messages

`ServerMessageMiddleware` provides support for JSON error messages.

#### Response expectations

If you want to make sure that a response has a specific header, content
type or other feature, use `ResponseExpectationMiddleware`.

#### Logging

There is also middleware to log all HTTP requests (and corresponding
response or exception), see `HttpLoggingMiddleware`

An adapter for `Psr\Log\LoggerInterface` is available.

This middleware is not added by default because the order is
important: The `HttpLoggingMiddleware` must be added last.