2011-11-02 11 views
13

Jestem nowy Symfony2 i próbuję wysłaćJak wysłać żądanie do API zewnętrznym

new Request() 

i do zewnętrznego interfejsu API. To jest to, co mam, ale nie wiem, czy jest to poprawne użycie wbudowanej biblioteki żądań/odpowiedzi.

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

Czy ktoś może mi powiedzieć, czy to zwróci odpowiedź dostarczonego API próbuję zadzwonić istnieje ?! Jeśli nie, co robię źle?

Odpowiedz

17

W Symfony2, klasa Żądanie reprezentuje żądanie HTTP wysłane do Twojej witryny. Zasadniczo, jeśli przejdziesz do www.yoursite.com/someaction Symfony tworzy instancję obiektu Symfony\Component\HttpFoundation\Request. Ten obiekt zawiera metody, których można użyć do zbadania żądania HTTP (np. Sprawdzając, czy zawiera zmienne GET lub POST).

To jest dobre wytłumaczenie dla Symfony and HTTP fundamentals. Polecam również zapoznanie się z kodem źródłowym żądania, aby zobaczyć dokładnie, co może zrobić.

Aby osiągnąć to, co próbujesz zrobić w swoim przykładzie, musisz użyć cURL. Osobiście używam klasy otoki na górze cURL, którą można znaleźć here.

Mam nadzieję, że to pomoże.

+4

+1 ale za uczynienie żądania Zwykle używam Buzz. Jest to czysta, prosta i lekka biblioteka HTTP: https://github.com/kriswallsmith/Buzz –

+0

@kuba Dzięki za link. Zacząłem używać Buzza dzisiaj i lubię to. Cieszyłem się również twoim artykułem na temat kontenera serwisowego :) –

+0

Cieszę się, że mogłem pomóc. Twoje zdrowie! :) –

7

https://github.com/CircleOfNice/CiRestClientBundle

To najprostszy sposób, aby wysłać żądanie do zewnętrznego interfejsu API. Zapewnia wszystkie metody http jako funkcje i jest łatwy w użyciu.

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

Jeśli chcesz korzystać klientom odpoczynek tylko do podmiotów CRUD wtedy myślę, że należy spojrzeć na

https://github.com/CircleOfNice/DoctrineRestDriver

który pomaga pozbyć się ręcznie wysyłania żądań i odpowiedzi mapowania ponieważ Doktryna wykonuje za ciebie pracę.

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

Użyj Guzzle z here.

Exemple:

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