You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
4.7 KiB
129 lines
4.7 KiB
1 year ago
|
# Guzzle Services
|
||
|
|
||
|
[](https://packagist.org/packages/guzzlehttp/guzzle-services)
|
||
|
[](https://travis-ci.org/guzzle/guzzle-services)
|
||
|
[](https://scrutinizer-ci.com/g/guzzle/guzzle-services/?branch=master)
|
||
|
[](https://scrutinizer-ci.com/g/guzzle/guzzle-services/?branch=master)
|
||
|
[](https://insight.sensiolabs.com/projects/b08be676-b209-40b7-a6df-b6d13e8dff62)
|
||
|
[](https://packagist.org/packages/guzzlehttp/guzzle-services)
|
||
|
[](https://packagist.org/packages/guzzlehttp/guzzle-services)
|
||
|
[](https://packagist.org/packages/guzzlehttp/guzzle-services)
|
||
|
|
||
|
Provides an implementation of the Guzzle Command library that uses Guzzle service descriptions to describe web services, serialize requests, and parse responses into easy to use model structures.
|
||
|
|
||
|
```php
|
||
|
use GuzzleHttp\Client;
|
||
|
use GuzzleHttp\Command\Guzzle\GuzzleClient;
|
||
|
use GuzzleHttp\Command\Guzzle\Description;
|
||
|
|
||
|
$client = new Client();
|
||
|
$description = new Description([
|
||
|
'baseUri' => 'http://httpbin.org/',
|
||
|
'operations' => [
|
||
|
'testing' => [
|
||
|
'httpMethod' => 'GET',
|
||
|
'uri' => '/get{?foo}',
|
||
|
'responseModel' => 'getResponse',
|
||
|
'parameters' => [
|
||
|
'foo' => [
|
||
|
'type' => 'string',
|
||
|
'location' => 'uri'
|
||
|
],
|
||
|
'bar' => [
|
||
|
'type' => 'string',
|
||
|
'location' => 'query'
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
'models' => [
|
||
|
'getResponse' => [
|
||
|
'type' => 'object',
|
||
|
'additionalProperties' => [
|
||
|
'location' => 'json'
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
]);
|
||
|
|
||
|
$guzzleClient = new GuzzleClient($client, $description);
|
||
|
|
||
|
$result = $guzzleClient->testing(['foo' => 'bar']);
|
||
|
echo $result['args']['foo'];
|
||
|
// bar
|
||
|
```
|
||
|
|
||
|
## Installing
|
||
|
|
||
|
This project can be installed using Composer:
|
||
|
|
||
|
``composer require guzzlehttp/guzzle-services``
|
||
|
|
||
|
For **Guzzle 5**, use ``composer require guzzlehttp/guzzle-services:0.6``.
|
||
|
|
||
|
**Note:** If Composer is not installed [globally](https://getcomposer.org/doc/00-intro.md#globally) then you may need to run the preceding Composer commands using ``php composer.phar`` (where ``composer.phar`` is the path to your copy of Composer), instead of just ``composer``.
|
||
|
|
||
|
## Plugins
|
||
|
|
||
|
* Load Service description from file [https://github.com/gimler/guzzle-description-loader]
|
||
|
|
||
|
## Transition guide from Guzzle 5.0 to 6.0
|
||
|
|
||
|
### Change regarding PostField and PostFile
|
||
|
|
||
|
The request locations `postField` and `postFile` were removed in favor of `formParam` and `multipart`. If your description looks like
|
||
|
|
||
|
```php
|
||
|
[
|
||
|
'baseUri' => 'http://httpbin.org/',
|
||
|
'operations' => [
|
||
|
'testing' => [
|
||
|
'httpMethod' => 'GET',
|
||
|
'uri' => '/get{?foo}',
|
||
|
'responseModel' => 'getResponse',
|
||
|
'parameters' => [
|
||
|
'foo' => [
|
||
|
'type' => 'string',
|
||
|
'location' => 'postField'
|
||
|
],
|
||
|
'bar' => [
|
||
|
'type' => 'string',
|
||
|
'location' => 'postFile'
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
]
|
||
|
```
|
||
|
|
||
|
you need to change `postField` to `formParam` and `postFile` to `multipart`.
|
||
|
|
||
|
More documentation coming soon.
|
||
|
|
||
|
## Cookbook
|
||
|
|
||
|
### Changing the way query params are serialized
|
||
|
|
||
|
By default, query params are serialized using strict RFC3986 rules, using `http_build_query` method. With this, array params are serialized this way:
|
||
|
|
||
|
```php
|
||
|
$client->myMethod(['foo' => ['bar', 'baz']]);
|
||
|
|
||
|
// Query params will be foo[0]=bar&foo[1]=baz
|
||
|
```
|
||
|
|
||
|
However, a lot of APIs in the wild require the numeric indices to be removed, so that the query params end up being `foo[]=bar&foo[]=baz`. You
|
||
|
can easily change the behaviour by creating your own serializer and overriding the "query" request location:
|
||
|
|
||
|
```php
|
||
|
use GuzzleHttp\Command\Guzzle\GuzzleClient;
|
||
|
use GuzzleHttp\Command\Guzzle\RequestLocation\QueryLocation;
|
||
|
use GuzzleHttp\Command\Guzzle\QuerySerializer\Rfc3986Serializer;
|
||
|
use GuzzleHttp\Command\Guzzle\Serializer;
|
||
|
|
||
|
$queryLocation = new QueryLocation('query', new Rfc3986Serializer(true));
|
||
|
$serializer = new Serializer($description, ['query' => $queryLocation]);
|
||
|
$guzzleClient = new GuzzleClient($client, $description, $serializer);
|
||
|
```
|
||
|
|
||
|
You can also create your own serializer if you have specific needs.
|