原文: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
主要有三種方法來生成一個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; }
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下載,好比淘寶開放平臺就提供了java、.net、PHP的SDK,而且還可以根據每一個應用的API調用權限進行單獨打包。
返回值要麼是JSON格式,要麼是XML格式。