123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <?php
- namespace GuzzleHttp\Command\Guzzle;
- use GuzzleHttp\ClientInterface;
- use GuzzleHttp\Command\CommandInterface;
- use GuzzleHttp\Command\Guzzle\Handler\ValidatedDescriptionHandler;
- use GuzzleHttp\Command\ServiceClient;
- use GuzzleHttp\HandlerStack;
- /**
- * Default Guzzle web service client implementation.
- */
- class GuzzleClient extends ServiceClient
- {
- /** @var array $config */
- private $config;
- /** @var DescriptionInterface Guzzle service description */
- private $description;
- /**
- * The client constructor accepts an associative array of configuration
- * options:
- *
- * - defaults: Associative array of default command parameters to add to
- * each command created by the client.
- * - validate: Specify if command input is validated (defaults to true).
- * Changing this setting after the client has been created will have no
- * effect.
- * - process: Specify if HTTP responses are parsed (defaults to true).
- * Changing this setting after the client has been created will have no
- * effect.
- * - response_locations: Associative array of location types mapping to
- * ResponseLocationInterface objects.
- *
- * @param ClientInterface $client HTTP client to use.
- * @param DescriptionInterface $description Guzzle service description
- * @param callable $commandToRequestTransformer
- * @param callable $responseToResultTransformer
- * @param HandlerStack $commandHandlerStack
- * @param array $config Configuration options
- */
- public function __construct(
- ClientInterface $client,
- DescriptionInterface $description,
- callable $commandToRequestTransformer = null,
- callable $responseToResultTransformer = null,
- HandlerStack $commandHandlerStack = null,
- array $config = []
- ) {
- $this->config = $config;
- $this->description = $description;
- $serializer = $this->getSerializer($commandToRequestTransformer);
- $deserializer = $this->getDeserializer($responseToResultTransformer);
- parent::__construct($client, $serializer, $deserializer, $commandHandlerStack);
- $this->processConfig($config);
- }
- /**
- * Returns the command if valid; otherwise an Exception
- * @param string $name
- * @param array $args
- * @return CommandInterface
- * @throws \InvalidArgumentException
- */
- public function getCommand($name, array $args = [])
- {
- if (!$this->description->hasOperation($name)) {
- $name = ucfirst($name);
- if (!$this->description->hasOperation($name)) {
- throw new \InvalidArgumentException(
- "No operation found named {$name}"
- );
- }
- }
- // Merge in default command options
- $args += $this->getConfig('defaults');
- return parent::getCommand($name, $args);
- }
- /**
- * Return the description
- *
- * @return DescriptionInterface
- */
- public function getDescription()
- {
- return $this->description;
- }
- /**
- * Returns the passed Serializer when set, a new instance otherwise
- *
- * @param callable|null $commandToRequestTransformer
- * @return \GuzzleHttp\Command\Guzzle\Serializer
- */
- private function getSerializer($commandToRequestTransformer)
- {
- return $commandToRequestTransformer ==! null
- ? $commandToRequestTransformer
- : new Serializer($this->description);
- }
- /**
- * Returns the passed Deserializer when set, a new instance otherwise
- *
- * @param callable|null $responseToResultTransformer
- * @return \GuzzleHttp\Command\Guzzle\Deserializer
- */
- private function getDeserializer($responseToResultTransformer)
- {
- $process = (! isset($this->config['process']) || $this->config['process'] === true);
- return $responseToResultTransformer ==! null
- ? $responseToResultTransformer
- : new Deserializer($this->description, $process);
- }
- /**
- * Get the config of the client
- *
- * @param array|string $option
- * @return mixed
- */
- public function getConfig($option = null)
- {
- return $option === null
- ? $this->config
- : (isset($this->config[$option]) ? $this->config[$option] : []);
- }
- /**
- * @param $option
- * @param $value
- */
- public function setConfig($option, $value)
- {
- $this->config[$option] = $value;
- }
- /**
- * Prepares the client based on the configuration settings of the client.
- *
- * @param array $config Constructor config as an array
- */
- protected function processConfig(array $config)
- {
- // set defaults as an array if not provided
- if (!isset($config['defaults'])) {
- $config['defaults'] = [];
- }
- // Add the handlers based on the configuration option
- $stack = $this->getHandlerStack();
- if (!isset($config['validate']) || $config['validate'] === true) {
- $stack->push(new ValidatedDescriptionHandler($this->description), 'validate_description');
- }
- if (!isset($config['process']) || $config['process'] === true) {
- // TODO: This belongs to the Deserializer and should be handled there.
- // Question: What is the result when the Deserializer is bypassed?
- // Possible answer: The raw response.
- }
- }
- }
|