/** * @param string $baseUrl * @param array $definitions * @param array $listeners * @param HttpAdapterInterface|null $adapter * @param Router|null $router * @return self */ public static function createEndpoint($baseUrl, array $definitions, array $listeners = array(), HttpAdapterInterface $adapter = null, Router $router = null) { if (!$adapter) { $adapter = new GuzzleHttpAdapter(new Client()); } if (!$router) { $router = new Router(); } if (!count($listeners)) { $serializerAdapter = new SymfonySerializerAdapter(new Serializer([], [new JsonEncoder()])); $serializerAdapter->addContentType('application/json', 'json'); $listeners[Endpoint::LISTENER_AFTER_RESPONSE] = new ContentTypeListenener($serializerAdapter); $listeners[Endpoint::LISTENER_AFTER_DATA] = new ReflectionHydratorListener(); } $endpoint = new Endpoint($adapter, $router, $baseUrl); foreach ($listeners as $evt => $listener) { $endpoint->addListener($evt, $listener); } $driver = new AnnotationDriver(); foreach ($definitions as $interfaceName) { $resources = $driver->createDefinitions($interfaceName); foreach ($resources as $resource) { $endpoint->addResourceDefinition($resource); } } return $endpoint; }
protected function execute(InputInterface $input, OutputInterface $output) { $driver = new AnnotationDriver(); $definitions = $driver->createDefinitions(GithubApi::class); $adapter = new GuzzleHttpAdapter(new Client()); $endpoint = new Endpoint($adapter, new Router(), 'http://api.github.com'); foreach ($definitions as $definition) { $endpoint->addResourceDefinition($definition); } $serializerAdapter = new SymfonySerializerAdapter(new Serializer([], [new JsonEncoder()])); $serializerAdapter->addContentType('application/json', 'json'); $endpoint->addListener(Endpoint::LISTENER_AFTER_RESPONSE, new ContentTypeListenener($serializerAdapter)); $endpoint->addListener(Endpoint::LISTENER_AFTER_DATA, new ReflectionHydratorListener()); /** @var GithubApi $endpoint */ $result = $endpoint->listRepos($input->getArgument('username')); var_dump($result); }