亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php基于curl擴展制作跨平臺的restfule 接口

2024-05-04 23:35:02
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了php基于curl擴展制作跨平臺的restfule 接口的相關資料以及詳細的代碼,有需要的小伙伴可以參考下。

restfule 接口

適用的平臺:跨平臺

所依賴:curl擴展

git:https://git.oschina.net/anziguoer/restAPI

ApiServer.php

 

 
  1. <?php 
  2. /** 
  3. * @Author: yangyulong 
  4. * @Email : anziguoer@sina.com 
  5. * @Date: 2015-04-30 05:38:34 
  6. * @Last Modified by: yangyulong 
  7. * @Last Modified time: 2015-04-30 17:14:11 
  8. */ 
  9.  
  10. class apiServer 
  11. /** 
  12. * 客戶端請求的方式 
  13. * @var string 
  14. */ 
  15. private $method = ''
  16.  
  17. /** 
  18. * 客戶端發送的數據 
  19. * @var [type] 
  20. */ 
  21. protected $param
  22.  
  23. /** 
  24. * 要操作的資源 
  25. * @var [type] 
  26. */ 
  27. protected $resourse
  28.  
  29. /** 
  30. * 要操作的資源id 
  31. * @var [type] 
  32. */ 
  33. protected $resourseId
  34.  
  35.  
  36. /** 
  37. * 構造函數, 獲取client 請求的方式,以及傳輸的數據 
  38. * @param object 可以自定義傳入的對象 
  39. */ 
  40. public function __construct() 
  41. //首先對客戶端的請求進行驗證 
  42. $this->authorization(); 
  43.  
  44. $this->method = strtolower($_SERVER['REQUEST_METHOD']); 
  45.  
  46. //所有的請求都是pathinfo模式 
  47. $pathinfo = $_SERVER['PATH_INFO']; 
  48.  
  49. //將pathinfo數據信息映射為實際請求方法 
  50. $this->getResourse($pathinfo); 
  51.  
  52. //獲取傳輸的具體參數 
  53. $this->getData(); 
  54.  
  55. //執行響應 
  56. $this->doResponse(); 
  57.  
  58. /** 
  59. * 根據不同的請求方式,獲取數據 
  60. * @return [type] 
  61. */ 
  62. private function doResponse(){ 
  63. switch ($this->method) { 
  64. case 'get'
  65. $this->_get(); 
  66. break
  67. case 'post'
  68. $this->_post(); 
  69. break
  70. case 'delete'
  71. $this->_delete(); 
  72. break
  73. case 'put'
  74. $this->_put(); 
  75. break
  76. default
  77. $this->_get(); 
  78. break
  79.  
  80. // 將pathinfo數據信息映射為實際請求方法 
  81. private function getResourse($pathinfo){ 
  82.  
  83. /** 
  84. * 將pathinfo數據信息映射為實際請求方法 
  85. * GET /users: 逐頁列出所有用戶; 
  86. * POST /users: 創建一個新用戶; 
  87. * GET /users/123: 返回用戶為123的詳細信息; 
  88. * PUT /users/123: 更新用戶123; 
  89. * DELETE /users/123: 刪除用戶123; 
  90. * 
  91. * 根據以上規則,將pathinfo第一個參數映射為需要操作的數據表, 
  92. * 第二個參數映射為操作的id 
  93. */ 
  94.  
  95. $info = explode('/', ltrim($pathinfo'/')); 
  96. list($this->resourse, $this->resourseId) = $info
  97.  
  98. /** 
  99. * 驗證請求 
  100. */ 
  101. private function authorization(){ 
  102. $token = $_SERVER['HTTP_CLIENT_TOKEN']; 
  103. $authorization = md5(substr(md5($token), 8, 24).$token); 
  104. if($authorization != $_SERVER['HTTP_CLIENT_CODE']){ 
  105. //驗證失敗,輸出錯誤信息給客戶端 
  106. $this->outPut($status = 1); 
  107.  
  108. /** 
  109. * [getData 獲取傳送的參數信息] 
  110. * @param [type] $pad [description] 
  111. * @return [type] [description] 
  112. */ 
  113. private function getData(){ 
  114. //所有的參數都是get傳參 
  115. $this->param = $_GET
  116.  
  117. /** 
  118. * 獲取資源操作 
  119. * @return [type] [description] 
  120. */ 
  121. protected function _get(){ 
  122. //邏輯代碼根據自己實際項目需要實現 
  123. }  
  124.  
  125. /** 
  126. * 新增資源操作 
  127. * @return [type] [description] 
  128. */ 
  129. protected function _post(){ 
  130. //邏輯代碼根據自己實際項目需要實現 
  131.  
  132. /** 
  133. * 刪除資源操作 
  134. * @return [type] [description] 
  135. */ 
  136. protected function _delete(){ 
  137. //邏輯代碼根據自己實際項目需要實現 
  138.  
  139. /** 
  140. * 更新資源操作 
  141. * @return [type] [description] 
  142. */ 
  143. protected function _put(){ 
  144. //邏輯代碼根據自己實際項目需要實現 
  145.  
  146. /** 
  147. * 出入服務端返回的數據信息 json格式 
  148. */ 
  149. public function outPut($stat$data=array()){ 
  150. $status = array
  151. //0 狀態表示請求成功 
  152. 0 => array
  153. 'code' => 1, 
  154. 'info' => '請求成功'
  155. 'data' =>$data 
  156. ), 
  157. //驗證失敗 
  158. 1 => array
  159. 'code' => 0, 
  160. 'info' => '請求不合法' 
  161. ); 
  162.  
  163. try{ 
  164. if(!in_array($statarray_keys($status))){ 
  165. throw new Exception('輸入的狀態碼不合法'); 
  166. }else
  167. echo json_encode($status[$stat]); 
  168. }catch (Exception $e){ 
  169. die($e->getMessage()); 

ApiClient.php

 

 
  1. <?php 
  2.  
  3. /** 
  4. * Created by PhpStorm. 
  5. * User: anziguoer@sina.com 
  6. * Date: 2015/4/29 
  7. * Time: 12:36 
  8. * link: http://www.ruanyifeng.com/blog/2014/05/restful_api.html [restful設計指南] 
  9. */ 
  10. /*** * * * * * * * * * * * * * * * * * * * * * * * * * ***/ 
  11. * 定義路由的請求方式 * 
  12. * * 
  13. * $url_model=0 * 
  14. * 采用傳統的URL參數模式 * 
  15. * http://serverName/appName/?m=module&a=action&id=1 * 
  16. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
  17. * PATHINFO模式(默認模式) * 
  18. * 設置url_model 為1 * 
  19. * http://serverName/appName/module/action/id/1/ * 
  20. ** * * * * * * * * * * * * * * * * * * * * * * * * * * ** 
  21. */ 
  22. class restClient 
  23. //請求的token 
  24. const token='yangyulong'
  25.  
  26. //請求url 
  27. private $url
  28.  
  29. //請求的類型 
  30. private $requestType
  31.  
  32. //請求的數據 
  33. private $data
  34.  
  35. //curl實例 
  36. private $curl
  37.  
  38. public $status
  39.  
  40. private $headers = array(); 
  41. /** 
  42. * [__construct 構造方法, 初始化數據] 
  43. * @param [type] $url 請求的服務器地址 
  44. * @param [type] $requestType 發送請求的方法 
  45. * @param [type] $data 發送的數據 
  46. * @param integer $url_model 路由請求方式 
  47. */ 
  48. public function __construct($url$data = array(), $requestType = 'get') { 
  49.  
  50. //url是必須要傳的,并且是符合PATHINFO模式的路徑 
  51. if (!$url) { 
  52. return false; 
  53. $this->requestType = strtolower($requestType); 
  54. $paramUrl = ''
  55. // PATHINFO模式 
  56. if (!emptyempty($data)) { 
  57. foreach ($data as $key => $value) { 
  58. $paramUrl.= $key . '=' . $value.'&'
  59. $url = $url .'?'$paramUrl
  60.  
  61. //初始化類中的數據 
  62. $this->url = $url
  63.  
  64. $this->data = $data
  65. try{ 
  66. if(!$this->curl = curl_init()){ 
  67. throw new Exception('curl初始化錯誤:'); 
  68. }; 
  69. }catch (Exception $e){ 
  70. echo '<pre>'
  71. print_r($e->getMessage()); 
  72. echo '</pre>'
  73.  
  74. curl_setopt($this->curl, CURLOPT_URL, $this->url); 
  75. curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); 
  76.  
  77.  
  78. /** 
  79. * [_post 設置get請求的參數] 
  80. * @return [type] [description] 
  81. */ 
  82. public function _get() { 
  83.  
  84.  
  85. /** 
  86. * [_post 設置post請求的參數] 
  87. * post 新增資源 
  88. * @return [type] [description] 
  89. */ 
  90. public function _post() { 
  91.  
  92. curl_setopt($this->curl, CURLOPT_POST, 1); 
  93.  
  94. curl_setopt($this->curl, CURLOPT_POSTFIELDS, $this->data); 
  95.  
  96.  
  97. /** 
  98. * [_put 設置put請求] 
  99. * put 更新資源 
  100. * @return [type] [description] 
  101. */ 
  102. public function _put() { 
  103.  
  104. curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'PUT'); 
  105.  
  106. /** 
  107. * [_delete 刪除資源] 
  108. * delete 刪除資源 
  109. * @return [type] [description] 
  110. */ 
  111. public function _delete() { 
  112. curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
  113.  
  114.  
  115. /** 
  116. * [doRequest 執行發送請求] 
  117. * @return [type] [description] 
  118. */ 
  119. public function doRequest() { 
  120. //發送給服務端驗證信息 
  121. if((null !== self::token) && self::token){ 
  122. $this->headers = array
  123. 'Client_Token: '.self::token, 
  124. 'Client_Code: '.$this->setAuthorization() 
  125. ); 
  126.  
  127. //發送頭部信息 
  128. $this->setHeader(); 
  129.  
  130. //發送請求方式 
  131. switch ($this->requestType) { 
  132. case 'post'
  133. $this->_post(); 
  134. break
  135.  
  136. case 'put'
  137. $this->_put(); 
  138. break
  139.  
  140. case 'delete'
  141. $this->_delete(); 
  142. break
  143.  
  144. default
  145. curl_setopt($this->curl, CURLOPT_HTTPGET, TRUE); 
  146. break
  147. //執行curl請求 
  148. $info = curl_exec($this->curl); 
  149.  
  150. //獲取curl執行狀態信息 
  151. $this->status = $this->getInfo(); 
  152. return $info
  153.  
  154. /** 
  155. * 設置發送的頭部信息 
  156. */ 
  157. private function setHeader(){ 
  158. curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->headers); 
  159.  
  160. /** 
  161. * 生成授權碼 
  162. * @return string 授權碼 
  163. */ 
  164. private function setAuthorization(){ 
  165. $authorization = md5(substr(md5(self::token), 8, 24).self::token); 
  166. return $authorization
  167. /** 
  168. * 獲取curl中的狀態信息 
  169. */ 
  170. public function getInfo(){ 
  171. return curl_getinfo($this->curl); 
  172.  
  173. /** 
  174. * 關閉curl連接 
  175. */ 
  176. public function __destruct(){ 
  177. curl_close($this->curl); 

testClient.php

 

 
  1. <?php 
  2. /** 
  3. * Created by PhpStorm. 
  4. * User: anziguoer@sina.com 
  5. * Date: 2015/4/29 
  6. * Time: 12:35 
  7. */ 
  8.  
  9. include './ApiClient.php'
  10.  
  11. $arr = array
  12. 'user' => 'anziguoer'
  13. 'passwd' => 'yangyulong' 
  14. ); 
  15. // $url = 'http://localhost/restAPI/restServer.php'; 
  16. $url = 'http://localhost/restAPI/testServer.php/user/123'
  17.  
  18. $rest = new restClient($url$arr'get'); 
  19. $info = $rest->doRequest(); 
  20.  
  21. //獲取curl中的狀態信息 
  22. $status = $rest->status; 
  23. echo '<pre>'
  24. print_r($info); 
  25. echo '</pre>'

testServer.php

 

 
  1. <?php 
  2. /** 
  3. * @Author: anziguoer@sina.com 
  4. * @Email: anziguoer@sina.com 
  5. * @link: https://git.oschina.net/anziguoer 
  6. * @Date: 2015-04-30 16:52:53 
  7. * @Last Modified by: yangyulong 
  8. * @Last Modified time: 2015-04-30 17:26:37 
  9. */ 
  10.  
  11. include './ApiServer.php'
  12.  
  13. class testServer extends apiServer 
  14. /** 
  15. * 先執行apiServer中的方法,初始化數據 
  16. * @param object $obj 可以傳入的全局對象[數據庫對象,框架全局對象等] 
  17. */ 
  18.  
  19. private $obj
  20.  
  21. function __construct()//object $obj 
  22. parent::__construct(); 
  23. //$this->obj = $obj; 
  24. //$this->resourse; 父類中已經實現,此類中可以直接使用 
  25. //$tihs->resourseId; 父類中已經實現,此類中可以直接使用 
  26.  
  27. /** 
  28. * 獲取資源操作 
  29. * @return [type] [description] 
  30. */ 
  31. protected function _get(){ 
  32. echo "get"
  33. //邏輯代碼根據自己實際項目需要實現 
  34. }  
  35.  
  36. /** 
  37. * 新增資源操作 
  38. * @return [type] [description] 
  39. */ 
  40. protected function _post(){ 
  41. echo "post"
  42. //邏輯代碼根據自己實際項目需要實現 
  43.  
  44. /** 
  45. * 刪除資源操作 
  46. * @return [type] [description] 
  47. */ 
  48. protected function _delete(){ 
  49. //邏輯代碼根據自己實際項目需要實現 
  50.  
  51. /** 
  52. * 更新資源操作 
  53. * @return [type] [description] 
  54. */ 
  55. protected function _put(){ 
  56. echo "put"
  57. //邏輯代碼根據自己實際項目需要實現 
  58.  
  59. $server = new testServer(); 

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
麻豆国产精品va在线观看不卡| 久久久免费电影| 91国内揄拍国内精品对白| 午夜精品福利在线观看| 美女扒开尿口让男人操亚洲视频网站| 日韩在线观看免费高清| 成人妇女免费播放久久久| 亚洲精品久久久久国产| 久久成人这里只有精品| 国产视频亚洲视频| 日韩av中文字幕在线| 成人黄色免费在线观看| 国产成人av网| 亚洲乱码国产乱码精品精天堂| 国产成人午夜视频网址| 最近2019年好看中文字幕视频| 国产日韩欧美在线观看| 国产精品免费视频久久久| 日本欧美精品在线| 欧美性视频网站| 久久久国产一区二区| 日韩影视在线观看| 国产成人涩涩涩视频在线观看| 国内精品久久久久| 国产精品久久久久久久av大片| 国产精品入口尤物| 久久精品国产一区二区三区| 国产精品爱啪在线线免费观看| 欧美性xxxx极品hd欧美风情| 国产精品久久久久久久久久尿| 国产精品久久99久久| xvideos国产精品| 欧美激情视频一区二区三区不卡| 北条麻妃一区二区三区中文字幕| 92国产精品久久久久首页| 国产精品福利网站| 国产在线观看一区二区三区| 亚洲欧洲一区二区三区在线观看| 久久久www成人免费精品张筱雨| 亚洲级视频在线观看免费1级| 国产91九色视频| 精品高清美女精品国产区| 国产精品丝袜一区二区三区| 精品一区二区亚洲| 最近2019好看的中文字幕免费| 欧美性受xxxx黑人猛交| 日本一欧美一欧美一亚洲视频| 青青草原一区二区| 久久伊人免费视频| 国产综合色香蕉精品| 91啪国产在线| 成人午夜黄色影院| 深夜福利国产精品| 97热在线精品视频在线观看| 亚洲网站视频福利| 国产免费亚洲高清| 亚洲精品永久免费精品| 国产精品美女主播在线观看纯欲| 国产精品久久久久久五月尺| 欧美黄色免费网站| 亚洲日本aⅴ片在线观看香蕉| 日韩精品丝袜在线| 亚洲人成网站999久久久综合| 91久久久久久久一区二区| 伊人伊成久久人综合网小说| 午夜精品一区二区三区在线视| 精品国产一区二区三区久久久狼| 欧美激情免费观看| 欧美壮男野外gaytube| 国产美女精品免费电影| 国产美女精品视频免费观看| 成人淫片在线看| 久久久精品久久久久| 精品国产一区二区三区久久狼黑人| 成人中文字幕+乱码+中文字幕| 波霸ol色综合久久| 91沈先生在线观看| 国产精品91在线观看| 中文字幕日韩免费视频| 成人有码在线视频| 国产一区二区丝袜高跟鞋图片| 在线免费观看羞羞视频一区二区| 精品国产精品三级精品av网址| 中文字幕欧美视频在线| 欧美激情一区二区久久久| 国产精品av免费在线观看| 成人免费淫片视频软件| 欧美孕妇毛茸茸xxxx| 国外日韩电影在线观看| 久久精品成人一区二区三区| 欧美成人免费视频| 中文字幕精品一区久久久久| 4p变态网欧美系列| 国产91精品高潮白浆喷水| 自拍偷拍亚洲区| 欧美性xxxx极品高清hd直播| 亚洲一区二区三区777| 欧美国产一区二区三区| 91精品国产乱码久久久久久久久| 欧美黑人国产人伦爽爽爽| 亚洲天堂成人在线视频| 久久久久久久久久国产| 国产成人福利网站| 日韩精品中文字幕久久臀| 色综合亚洲精品激情狠狠| 国产精品国模在线| 国产精品欧美一区二区三区奶水| 成人免费在线网址| 97**国产露脸精品国产| 68精品久久久久久欧美| 国产精品人成电影在线观看| 亚洲人成啪啪网站| 色妞一区二区三区| 亚洲免费视频网站| 亚洲福利在线视频| 九九热这里只有在线精品视| 久久视频这里只有精品| 亚州国产精品久久久| 岛国av一区二区| 色偷偷av一区二区三区| 亚洲加勒比久久88色综合| 欧美性69xxxx肥| 成人羞羞国产免费| 国产成人极品视频| 亚洲男人7777| 中文字幕欧美视频在线| 欧美日韩国产色| 久久综合免费视频| 国产精品爱啪在线线免费观看| 自拍偷拍亚洲精品| 中文字幕一区二区三区电影| 久久成人国产精品| 日韩精品视频免费在线观看| 欧美激情中文字幕乱码免费| 日韩va亚洲va欧洲va国产| 青青草精品毛片| 国产精品96久久久久久| 成人av在线亚洲| 色无极亚洲影院| 超碰97人人做人人爱少妇| 一区二区三区国产视频| 日韩成人av在线播放| 91在线高清免费观看| 亚洲激情在线视频| 久久九九精品99国产精品| 欧美日韩不卡合集视频| 欧美日韩亚洲一区二区三区| 久久国产精彩视频| 亚洲美女av黄| 久久久这里只有精品视频| 4p变态网欧美系列| 成人免费直播live| 国产欧美一区二区三区视频| 欧美日韩中国免费专区在线看| 在线视频免费一区二区| 国产亚洲精品久久久久久| 69视频在线播放| 久久人人爽人人爽人人片av高请| 国产精品草莓在线免费观看| 国产精品免费视频久久久| 97在线视频精品| 亚洲精品成人av| 韩国视频理论视频久久| 欧美电影免费观看大全|