web-dev-qa-db-ja.com

PHP)を介してRESTfulAPIにアクセスする方法

私はPHPと、RESTful APIの操作のすべてに慣れていません。現時点でやりたいのは、プレーンなHTTP GETリクエストを OpenStreetMap API

私は simple PHP REST client by tcdent )を使用しており、基本的にその機能を理解しています。現在のチェンジセットを取得するためのサンプルコードOSMでは:

<?php
 include("restclient.php");

 $api = new RestClient(array(
     'base_url' => "http://api.openstreetmaps.org/", 
     'format' => "xml")
 );
 $result = $api->get("api/0.6/changesets");

 if($result->info->http_code < 400) {         
     echo "success:<br/><br/>";         
 } else {
     echo "failed:<br/><br/>";
 }
 echo $result->response;
?>

ブラウザに「http://api.openstreetmaps.org/api/0.6/changesets」というURLを入力すると、XMLファイルが配信されます。ただし、このPHPコードを介して、OSM404ファイルが見つかりませんページを返します。

これはかなりばかげたPHP初心者の質問だと思いますが、これらすべてのクライアントサーバー側プロセスなどについて(まだ)あまり知らないため、何が欠けているのかわかりません。

ご協力いただきありがとうございます!

11
Matthias Loeks

カールを使用します。 http://www.lornajane.net/posts/2008/using-curl-and-php-to-talk-to-a-rest-service を参照してください

   $service_url = 'http://example.com/rest/user/';
   $curl = curl_init($service_url);
   $curl_post_data = array(
        "user_id" => 42,
        "emailaddress" => '[email protected]',
        );
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($curl, CURLOPT_POST, true);
   curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
   $curl_response = curl_exec($curl);
   curl_close($curl);

$ xml = new SimpleXMLElement($ curl_response);

15
Martin Stein

OK、問題は明らかに 'format' => "xml"仕様でした。それがなく、SimpleXMLElementの助けを借りて(Martinに感謝)、XMLデータを正しくロードするようになりました:

<?php
   include("restclient.php");
   $api = new RestClient(); 
   $result = $api->get("http://api.openstreetmap.org/api/capabilities");
   $code = $result->info->http_code;
   if($code == 200) {
       $xml = new SimpleXMLElement($result->response);
       echo "Loaded XML, root element: ".$xml->getName();
   } else {
       echo "GET failed, error code: ".$code;
   }
?>

これはXML応答に対してのみ機能するため、あまり柔軟なアプローチではありませんが、現時点では十分であり、OSMAPIから始めることをお勧めします。

ご協力いただきありがとうございます!

4
matze09