ZH奶酪:使用PHP調用REST API

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

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

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

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

然而,SOAP做爲一種古老的Web服務技術,短時間內還不會退出歷史舞臺。json

在咱們第三方開發者的PHP應用程序中若是要使用REST API,主要分爲兩個步驟。1、生成請求。2、處理返回值。api

1、生成請求

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

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

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

第三種方法是使用跟API配套的自定義Class,或者叫SDK。若是能夠的話,儘可能使用第三種方 法,它是最方便的。curl

手動生成請求

手動生成請求只有在第一次處理的時候纔有點棘手,之後的話能夠調用方法直接獲得結果。此外瞭解手動生成請求的過程也有助於理解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方法,這個方法也很方便.

2、處理返回值

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

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

相關文章
相關標籤/搜索