2011-11-02 23 views
13

Tôi mới vào Symfony2 và tôi đang cố gắng để gửi mộtLàm thế nào để gửi một yêu cầu đến một API bên ngoài

new Request() 

đến và đi bên ngoài API. Đây là những gì tôi có nhưng tôi không biết nếu nó là sử dụng chính xác của xây dựng trong thư viện yêu cầu/trả lời.

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

Bất cứ ai có thể cho tôi biết nếu điều này sẽ trả về phản hồi được cung cấp API tôi đang cố gắng gọi tồn tại ?! Nếu không, tôi đang làm gì sai?

Trả lời

17

Trong Symfony2, lớp Yêu cầu thể hiện yêu cầu HTTP được thực hiện cho trang web của bạn. Về cơ bản, nếu bạn truy cập www.yoursite.com/someaction Symfony sẽ khởi tạo đối tượng Symfony\Component\HttpFoundation\Request. Đối tượng này chứa các phương thức mà bạn có thể sử dụng để kiểm tra yêu cầu HTTP (chẳng hạn như xem nó có chứa các biến GET hoặc POST không.)

Đây là giải thích tốt về Symfony and HTTP fundamentals. Tôi cũng khuyên bạn nên xem mã nguồn cho Yêu cầu để xem chính xác những gì nó có thể làm.

Để đạt được những gì bạn đang cố gắng làm trong ví dụ của mình, bạn cần sử dụng cURL. Cá nhân tôi sử dụng một lớp trình bao bọc trên đầu trang của cURL mà bạn có thể tìm thấy here.

Hy vọng điều này sẽ hữu ích.

+4

+1 nhưng để làm yêu cầu tôi thường sử dụng Buzz. Đó là thư viện HTTP gọn gàng, đơn giản và gọn nhẹ: https://github.com/kriswallsmith/Buzz –

+0

@kuba Cảm ơn bạn đã liên kết. Tôi bắt đầu sử dụng Buzz hôm nay và tôi thích nó. Tôi cũng rất thích bài viết của bạn về thùng chứa dịch vụ :) –

+0

Tôi rất vui vì tôi có thể trợ giúp. chúc mừng! :) –

7

https://github.com/CircleOfNice/CiRestClientBundle

Đó là cách dễ nhất để gửi yêu cầu đến một API bên ngoài. Nó cung cấp tất cả các phương thức http như các hàm và rất dễ sử dụng.

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

Nếu bạn muốn sử dụng các khách hàng còn lại chỉ để tổ chức CRUD sau đó tôi nghĩ rằng bạn nên có một cái nhìn tại

https://github.com/CircleOfNice/DoctrineRestDriver

giúp bạn thoát khỏi tay gửi yêu cầu và phản ứng lập bản đồ vì Giáo lý đang làm việc cho bạn.

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

Sử dụng Guzzle từ here.

dụ:

$client = new \GuzzleHttp\Client(); 
$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); 
echo $res->getStatusCode(); 
Các vấn đề liên quan