PHPackages                             gamsh/rest-client - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. gamsh/rest-client

ActiveLibrary[HTTP &amp; Networking](/categories/http)

gamsh/rest-client
=================

REST client for PHP 8.3+

2.0.3(1y ago)0343↓50%1MITPHPPHP &gt;=8.3

Since Oct 22Pushed 1y ago1 watchersCompare

[ Source](https://github.com/GaMsh/rest-client)[ Packagist](https://packagist.org/packages/gamsh/rest-client)[ RSS](/packages/gamsh-rest-client/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (7)Versions (4)Used By (1)

RestClient
==========

[](#restclient)

RestClient is [an interface](src/RestClientInterface.php) representing the main entry point for performing REST requests.

RestClient is a handy tool that adds a list of extra features to a Psr/HttpClient (at the same time it is not intended to replace Psr/HttpClient):

1. Serializer/Deserialize request/response body.
2. Intercept request (allows to modify request before sending or process a response object).
3. Retry strategy.

Install
-------

[](#install)

```
composer require gamsh/rest-client
```

Quick Examples
--------------

[](#quick-examples)

### Create a new REST client

[](#create-a-new-rest-client)

For simplicity, we are using a Guzzle HTTP client, but you are free to use any PSR-18 compliant HTTP client.

```
// PSR-18 HTTP client
$httpClient = new GuzzleHttp\Client([
    'base_uri' => 'https://animechan.vercel.app',
]);

// Serializer
$serializer = new \RestClient\Serialization\Symfony\JsonSymfonySerializer();

$restClient = new \RestClient\RestClient($httpClient, $serializer);
```

### Define an application response model

[](#define-an-application-response-model)

```
class AnimeQuote
{
    private string $anime = '';
    private string $character = '';
    private string $quote = '';

    public function getAnime(): string
    {
        return $this->anime;
    }

    public function setAnime(string $anime): void
    {
        $this->anime = $anime;
    }

    public function getCharacter(): string
    {
        return $this->character;
    }

    public function setCharacter(string $character): void
    {
        $this->character = $character;
    }

    public function getQuote(): string
    {
        return $this->quote;
    }

    public function setQuote(string $quote): void
    {
        $this->quote = $quote;
    }
}
```

### Get an object

[](#get-an-object)

Take a look at [the example](example/anime_quote.php).

```
/** @var AnimeQuote|null $quote */
$quote = $restClient->getForObject('/api/random', AnimeQuote::class);

print "------------------------------------------\n";
print 'Anime:     ' . $quote->getAnime() . "\n";
print 'Character: ' . $quote->getCharacter() . "\n";
print 'Quote:     ' . $quote->getQuote() . "\n";
print "------------------------------------------\n";
```

### Get a list of objects

[](#get-a-list-of-objects)

Take a look at [the example](example/JsonPlaceholder/print_blog_posts.php).

```
/** @var array $models */
$models = $restClient->getForObject('/api/models', \RestClient\Helpers\asList(ApiModel::class));
```

### Intercept request

[](#intercept-request)

Use case of interceptor:

- Request header modification
- Request and response logging
- Request denial based on certain request parameters
- Changing the request URL address

Out of the box you can use following interceptors:

- [Log request](src/Interceptor/LogRequestInterceptor.php)
- [Retry](src/Interceptor/RetryInterceptor.php)
- [Add header](src/Interceptor/AddHeaderInterceptor.php)
- [Callable](src/Interceptor/CallableInterceptor.php)

Did not find a right interceptor? Do not get upset! It's easy to create a new one, just implement the following interface:

```
interface RequestInterceptorInterface
{
    /**
     * @throws ClientExceptionInterface
     */
    public function intercept(RequestInterface $request, ContextInterface $context, RequestExecutionInterface $execution): ResponseInterface;
}
```

Set interceptors

```
$restClient->setInterceptors([
    new \RestClient\Interceptor\RetryInterceptor(), //
