ZH奶酪:使用PHP調用REST API


原文:http://yuguo.us/weblog/php-rest-api/

表征狀態轉移(英文:REpresentational State Transfer,簡稱REST)是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。

越來越多的公司開放了API,比如騰訊開放平台淘寶開放平台百度開放平台Google Developers等。開放的方式各不相同,有REST和SOAP兩種。

REST很容易理解,而且只要是支持HTTP/HTTPS的客戶端/服務器就支持它。你可以用HTTP GET方法來執行命令。所以,開發者們感受到的REST的優勢是:開發簡單、只需依托現有Web基礎設施、以及學習成本低。

然而,SOAP作為一種古老的Web服務技術,短期內還不會退出歷史舞台。

在我們第三方開發者的PHP應用程序中如果要使用REST API,主要分為兩個步驟。一、生成請求。二、處理返回值。

一、生成請求

主要有三種方法來生成一個HTTP請求。

第一種方法就是手動生成請求,使用PHP的header方法。這給了你最大的靈活性,但是需要更多的 編碼。

第二種方法是使用PHP內置的file_get_contents()方法或者file()/fopen()/fread()/fclose()方 法,使用這種方法少了一點靈活性,但是代碼量非常少。

第三種方法是使用跟API配套的自定義Class,或者叫SDK。如果可以的話,盡量使用第三種方 法,它是最方便的。

手動生成請求

手動生成請求只有在第一次處理的時候才有點棘手,以后的話可以調用方法直接得到結果。此外了解手動生成請求的過程也有助於理解REST和HTTP。

function callAPI($endpoint, $devkey, $action, $type, $keyword)

{

  $action = urlencode($action);

  $type = urlencode($type);

  $keyword = urlencode($keyword);

  $url = $endpoint . "?devkey=$devkey&action=$action&type=$type&keyword=$keyword";

  $url_info = parse_url($url);

  $host = $url_info['host'];

  $path = $url_info['path'] . "?" . $url_info[‘query'];

  $data = "";

  $fp=fsockopen($host, 80);

  fputs($fp, "POST ". $path . "HTTP/1.1\r\n");

  fputs($fp, "Host: ". $host ."\r\n");

  fputs($fp, "Accept: */*\r\n");

  fputs($fp, "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n");

  fputs($fp, "Connection: close\r\n");

  fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n");

  fputs($fp, "Content-Length: ". strlen($data) . "\r\n\r\n");

  fputs($fp, "$data");

  $response="";

  while(!feof($fp))

  {

    $response.=fgets($fp, 128);

  }

  fclose($fp);

  list($http_headers, $http_content)=explode("\r\n\r\n", $response);

  return $http_content;

}

快速方法(使用PHP的內置方法file_get_contents會讓代碼量少很多(也少了一些靈活性)。)

function callAPIQuick($endpoint, $devkey, $action, $type, $keyword)

{

  $action = urlencode($action);

  $type = urlencode($type);

  $keyword = urlencode($keyword);

  $url = $endpoint . "?devkey=$devkey&action=$action&type=$type&keyword=$keyword";

  $response = @file_get_contents($url);

  return $response;

}

 SDK方法

很多開放平台都會提供各語言的SDK下載,比如淘寶開放平台就提供了java、.net、PHP的SDK,並且還能夠根據每個應用的API調用權限進行單獨打包。

原文作者沒有提到curl方法,這個方法也很方便.

二、處理返回值

返回值要么是JSON格式,要么是XML格式。

如果是XML的話,可以使用PHP5的simplexml來解析。自從PHP 5.2,也已經默認加入了JSON格式的支持。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM