Symfony2を使用して、HTTPSに基づく外部APIにアクセスする必要があります。
外部URIを呼び出して、それを使用して「再生」する応答を管理するにはどうすればよいですか。たとえば、成功または失敗のメッセージを表示するには?
私は次のようなことを考えています(performRequestは完全に発明されたメソッドであることに注意してください):
$response = $this -> performRequest("www.someapi.com?param1=A¶m2=B");
if ($response -> getError() == 0){
// Do something good
}else{
// Do something too bad
}
バズやその他のクライアントについて読んでいます。しかし、Symfony2は独自にそれを行うことができるはずだと思います。
CURLを使用することをお勧めします。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'www.someapi.com?param1=A¶m2=B');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
// If using JSON...
$data = json_decode($response);
注:Webサーバーのphpにはphp5-curl
ライブラリがインストールされました。
APIリクエストがJSONデータを返していると仮定すると、 このページ が役立つ場合があります。
これは、Symfony2に固有のコードを使用しません。このプロセスを簡素化できるバンドルがあるかもしれませんが、もしあれば、それについては知りません。
Symfonyにはこのための組み込みサービスがありませんが、これは依存性注入フレームワークを使用して独自のサービスを作成する絶好の機会です。ここでできることは、外部呼び出しを管理するサービスを書くことです。サービスを「http」と呼びましょう。
最初に、performRequest()
メソッドを使用してクラスを記述します。
_namespace MyBundle\Service;
class Http
{
public function performRequest($siteUrl)
{
// Code to make the external request goes here
// ...probably using cUrl
}
}
_
_app/config/config.yml
_でサービスとして登録します:
_services:
http:
class: MyBundle\Service\Http
_
これで、コントローラーは「http」というサービスにアクセスできます。 symfonyは「コンテナ」でこのクラスの単一のインスタンスを管理し、$this->get("http")
経由でアクセスできます:
_class MyController
{
$response = $this->get("http")->performRequest("www.something.com");
...
}
_
私が知っている最高のクライアント: http://docs.guzzlephp.org/en/latest/
Symfony2プロジェクトに統合するバンドルが既にあります: https://github.com/8p/GuzzleBundle
$client = $this->get('guzzle.client');
// send an asynchronous request.
$request = $client->createRequest('GET', 'http://httpbin.org', ['future' => true]);
// callback
$client->send($request)->then(function ($response) {
echo 'I completed! ' . $response;
});
// optional parameters
$response = $client->get('http://httpbin.org/get', [
'headers' => ['X-Foo-Header' => 'value'],
'query' => ['foo' => 'bar']
]);
$code = $response->getStatusCode();
$body = $response->getBody();
// json response
$response = $client->get('http://httpbin.org/get');
$json = $response->json();
// extra methods
$response = $client->delete('http://httpbin.org/delete');
$response = $client->head('http://httpbin.org/get');
$response = $client->options('http://httpbin.org/get');
$response = $client->patch('http://httpbin.org/patch');
$response = $client->post('http://httpbin.org/post');
$response = $client->put('http://httpbin.org/put');
詳細については、次を参照してください。 http://docs.guzzlephp.org/en/latest/index.html
https://github.com/sensio/SensioBuzzBundle はあなたが探しているもののようです。
Kris Wallsmithバズライブラリを実装して、HTTP要求を実行します。
Githubページでドキュメントを読むことができます。使用方法はかなり基本的なものです。
$buzz = $this->container->get('buzz');
$response = $buzz->get('http://google.com');
echo $response->getContent();
Symfonyには独自のrestクライアントがありませんが、すでに述べたように、いくつかのバンドルがあります。これは私の好みのものです:
https://github.com/CircleOfNice/CiRestClientBundle
$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');
リクエストを送信する
$response = $restclient->get($url);
symfony応答オブジェクトを取得します。その後、次の方法でステータスコードを取得できます。
$httpCode = $response-> getStatusCode();
コードは次のようになります。
$restClient = $this->container->get('ci.restclient');
if ($restClient->get('http://www.yourUrl.com')->getStatusCode !== 200) {
// no error
} else {
// error
}