2011-11-02 7 views
13

Sono nuovo di Symfony2 e sto cercando di inviare unCome inviare una richiesta a un API esterna

new Request() 

da e per esterni API. Questo è quello che ho ma non so se è corretto utilizzare la libreria di richiesta/risposta integrata.

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

Qualcuno può dirmi se questo restituirà una risposta a condizione che l'API che sto cercando di chiamare esista ?! In caso contrario, cosa sto sbagliando?

risposta

17

In Symfony2, la classe Request rappresenta una richiesta HTTP inviata al tuo sito. Fondamentalmente, se vai a www.yoursite.com/someaction symfony crea un oggetto Symfony\Component\HttpFoundation\Request. Questo oggetto contiene metodi che è possibile utilizzare per esaminare la richiesta HTTP (come vedere se contiene variabili GET o POST.)

Questa è una buona spiegazione di Symfony and HTTP fundamentals. Raccomando anche di guardare il codice sorgente per la richiesta di vedere esattamente cosa può fare.

Per ottenere ciò che si sta tentando di fare nell'esempio, è necessario utilizzare cURL. Io personalmente uso una classe wrapper in cima a cURL che puoi trovare here.

Spero che questo aiuti.

+4

+1, ma per fare le richieste io di solito uso Buzz. È una libreria HTTP pulita, semplice e leggera: https://github.com/kriswallsmith/Buzz –

+0

@kuba Grazie per il collegamento. Ho iniziato a utilizzare Buzz oggi e mi piace. Mi è piaciuto anche il tuo articolo sul contenitore dei servizi :) –

+0

sono felice di poterti aiutare. Saluti! :) –

7

https://github.com/CircleOfNice/CiRestClientBundle

E 'il modo più semplice per inviare una richiesta a un API esterna. Fornisce tutti i metodi http come funzioni ed è facile da usare.

$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'); 

Se si desidera utilizzare i clienti di riposo solo per entità CRUD allora penso che si dovrebbe dare un'occhiata a

https://github.com/CircleOfNice/DoctrineRestDriver

che vi aiuta a sbarazzarsi di richieste di invio manualmente e le risposte di mappatura perché La dottrina sta facendo il lavoro per te.

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

Usa Guzzle da here.

Esempio:

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