2011-11-02 25 views
13

Soy nuevo en Symfony2 y estoy tratando de enviar un¿Cómo enviar una solicitud a un API externa

new Request() 

y externa a la API. Esto es lo que tengo, pero no sé si es el uso correcto de la biblioteca de solicitud/respuesta incorporada.

$request = new Request('https://myservice.com/apimethod?foo=bar', 'GET'); 

¿Alguien puede decirme si esto devolverá una respuesta siempre que exista la API que intento llamar? Si no, ¿qué estoy haciendo mal?

Respuesta

17

En Symfony2, la clase de solicitud representa una solicitud HTTP realizada en su sitio. Básicamente, si va al www.yoursite.com/someaction, Symfony crea un objeto Symfony\Component\HttpFoundation\Request. Este objeto contiene métodos que puede usar para examinar la solicitud HTTP (como ver si contiene variables GET o POST).

Esta es una buena explicación de Symfony and HTTP fundamentals. También recomiendo consultar el código fuente de Request para ver exactamente qué puede hacer.

Para lograr lo que intenta hacer en su ejemplo, necesitará usar cURL. Yo personalmente uso una clase contenedora sobre cURL que puedes encontrar here.

Espero que esto ayude.

+4

+1 pero para hacer peticiones que suelo usar Buzz. Es una biblioteca HTTP limpia, simple y liviana: https://github.com/kriswallsmith/Buzz –

+0

@kuba Gracias por el enlace. Empecé a usar Buzz hoy y me gusta. También disfruté su artículo sobre el contenedor de servicio :) –

+0

me alegro de poder ayudar. ¡aclamaciones! :) –

7

https://github.com/CircleOfNice/CiRestClientBundle

Es la forma más fácil de enviar una solicitud a un API externa. Proporciona todos los métodos http como funciones y es fácil de usar.

$restClient = $this->container->get('ci.restclient'); 

$restClient->get('http://www.someUrl.com'); 
$restClient->post('http://www.someUrl.com', 'somePayload'); 
$restClient->put('http://www.someUrl.com', 'somePayload'); 
$restClient->delete('http://www.someUrl.com'); 
$restClient->patch('http://www.someUrl.com', 'somePayload'); 

$restClient->head('http://www.someUrl.com'); 
$restClient->options('http://www.someUrl.com', 'somePayload'); 
$restClient->trace('http://www.someUrl.com'); 
$restClient->connect('http://www.someUrl.com'); 

Si desea utilizar clientes de descanso sólo para entidades CRUD entonces yo creo que se debe echar un vistazo a

https://github.com/CircleOfNice/DoctrineRestDriver

que le ayuda a deshacerse de las solicitudes de envío de forma manual y las respuestas de mapeo porque Doctrine está haciendo el trabajo por ti.

// Sends a GET request to http://$driverUrl/@TableAnnotation/1 and returns a valid MyEntity Entity 
$entity = $em->find("Some\Namespace\MyEntity", 1); 
0

Use Guzzle de here.

Ejemplo:

$client = new \GuzzleHttp\Client(); 
$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); 
echo $res->getStatusCode(); 
Cuestiones relacionadas