web-dev-qa-db-ja.com

外部APIにリクエストを送信する方法

私はSymfony2を使い始めたばかりですが、

new Request()

と外部API。これは私が持っているものですが、組み込みの要求/応答ライブラリを正しく使用しているかどうかはわかりません。

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

私が呼び出そうとしているAPIが存在する場合、これが応答を返すかどうか誰かに教えてもらえますか?そうでない場合、私は何が間違っていますか?

15
travega

Symfony2では、Requestクラスはサイトに対して行われたHTTPリクエストを表します。基本的に、www.yoursite.com/someactionに移動すると、symfonyはSymfony\Component\HttpFoundation\Requestオブジェクトをインスタンス化します。このオブジェクトには、HTTPリクエストを調べるために使用できるメソッドが含まれています(GETまたはPOST変数が含まれているかどうかを確認するなど)。

これは SymfonyとHTTPの基礎 の良い説明です。また、Requestのソースコードを見て、何ができるかを正確に確認することをお勧めします。

あなたの例でやろうとしていることを達成するために、あなたは cURL を使用する必要があります。私は個人的にcURLの上にラッパークラスを使用しています here を見つけることができます。

お役に立てれば。

18

https://github.com/CircleOfNice/CiRestClientBundle

これは、外部APIにリクエストを送信する最も簡単な方法です。すべてのhttpメソッドを関数として提供し、使いやすいです。

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

残りのクライアントをCRUDエンティティにのみ使用する場合は、

https://github.com/CircleOfNice/DoctrineRestDriver

Doctrineがあなたのために仕事をしているので、これはあなたが手動でリクエストを送信してレスポンスをマッピングすることを取り除くのに役立ちます。

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

他の誰かがこのような質問に答えました: https://stackoverflow.com/a/10715549/2306587

外部リクエストを行うためにcURLに依存する必要はありません。それを処理できるSymfony-Bundleがあります: http://knpbundles.com/sonata-project/SonataGoutteBundle

2
BillyTom

ここ からGuzzleを使用します。

例:

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