如何使用 PHP 開發 API(Application Programming Interface,應用程式介面) 呢?
1、和WEB 開發一樣,首先需要一些相關的參數,這些參數,都會由客戶端傳過來,也許是GET 也許是POST,這個需要開發團隊相互之間約定好,或製定統一規範。
2、有了參數,根據應用需求,完成資料處理,例如:任務進度更新、APP內購、一局遊戲結束資料提交等等
3、資料邏輯處理完之後,傳回客戶端所需用到的相關數據,例如:任務狀態、內購結果、玩家資訊等等
數據怎麼回客戶端?
直接輸出的形式,如:JSON、XML、TEXT 等等。
4、客戶端取得到你回傳的資料後,在客戶端本地和使用者進行互動
#暫時寫的一個簡單API 範例:
<?php // 设置json格式 header('content-type:application/json;charset=utf-8'); $output = array(); $a = @$_GET['a'] ? $_GET['a'] : ''; $uid = @$_GET['uid'] ? $_GET['uid'] : 0; if (empty($a)) { $output = array('data'=>NULL, 'info'=>'数据错误', 'code'=>-201); exit(json_encode($output)); } //走接口 if ($a == 'get_users') { //检查用户 if ($uid == 0) { $output = array('data'=>NULL, 'info'=>'The uid is null!', 'code'=>-401); exit(json_encode($output)); } //假设 $mysql 是数据库 $mysql = array( 10001 => array( 'uid'=>10001, 'vip'=>5, 'nickname' => 'Shine X', 'email'=>'979137@qq.com', 'qq'=>979137, 'gold'=>1500, 'powerplay'=> array('2xp'=>12,'gem'=>12,'bingo'=>5,'keys'=>5,'chest'=>8), 'gems'=> array('red'=>13,'green'=>3,'blue'=>8,'yellow'=>17), 'ctime'=>1376523234, 'lastLogin'=>1377123144, 'level'=>19, 'exp'=>16758, ), 10002 => array( 'uid'=>10002, 'vip'=>50, 'nickname' => 'elva', 'email'=>'elva@ezhi.net', 'qq'=>NULL, 'gold'=>14320, 'powerplay'=> array('2xp'=>1,'gem'=>120,'bingo'=>51,'keys'=>5,'chest'=>8), 'gems'=> array('red'=>13,'green'=>3,'blue'=>8,'yellow'=>17), 'ctime'=>1376523234, 'lastLogin'=>1377123144, 'level'=>112, 'exp'=>167588, ) ); $uidArr = array(10001,10002); if (in_array($uid, $uidArr, true)) { $output = array('data' => NULL, 'info'=>'The user does not exist!', 'code' => -402); exit(json_encode($output)); } //查询数据库 $userInfo = $mysql[$uid]; //输出数据 $output = array( 'data' => array( 'userInfo' => $userInfo, 'isLogin' => true,//是否首次登陆 'unread' => 4,//未读消息数量 'untask' => 3,//未完成任务 ), 'info' => 'Here is the message which, commonly used in popup window', //消息提示,客户端常会用此作为给弹窗信息。 'code' => 200, //成功与失败的代码,一般都是正数或者负数 ); exit(json_encode($output)); } elseif ($a == 'get_games_result') { //... die('您正在调 get_games_result 接口!'); } elseif ($a == 'upload_avatars') { //.... die('您正在调 upload_avatars 接口!'); }
對客戶端而言,直接呼叫這樣的位址:
http://localhost/api/test/index.php http://localhost/api/test/index.php?a=get_users http://localhost/api/test/index.php?a=get_users&uid=10001 http://localhost/api/test/index.php?a=get_users&uid=10002 http://localhost/api/test/index.php?a=get_users&uid=10003
#實際專案中,我們在開發API 應該注意的幾個事項(僅供參考):
1、單一檔案實作多介面的形式有很多種,例如:if..elseif.. 或switch 或動態方法(也就是TP的這種存取函數體的形式)
2、對於數據的輸出最好用json,json具有相當強大的跨平台性,市場上各大主流程式語言都支援json解析,json正在逐步取代xml,成為網路資料的通用格式
3、介面安全,一定要增加介面驗證。例如,客戶端和服務端針對不同介面統一做好加密方式,服務端在對於每次介面需要都要驗證。以確保防止介面被惡意刷新或駭客惡意調用,尤其是大型商業應用。
4、對於線上的API 必須保證所有介面正常且關閉所有的錯誤訊息=> error_reporting(0),在輸出JSON 時,不能有任何其它輸出,否則,客戶端將解析數據失敗,直接Crash!
5、開發API 和WEB 有一定的區別,如果是WEB 的話,可能程式碼出錯了,不會導致特別嚴重的錯誤,也許只是導致資料寫入和查詢失敗,也許導致WEB 的某個部分錯位或亂碼。但如果是 API,直接 Crash!
更多PHP相關知識,請造訪PHP中文網!
以上是php專案中的介面怎麼寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!