如何用php實(shí)現(xiàn)API?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
創(chuàng)新互聯(lián)專注于錫山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供錫山營(yíng)銷型網(wǎng)站建設(shè),錫山網(wǎng)站制作、錫山網(wǎng)頁(yè)設(shè)計(jì)、錫山網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造錫山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供錫山網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。1、和 WEB 開(kāi)發(fā)一樣,首先需要一些相關(guān)的參數(shù),這些參數(shù),都會(huì)由客戶端傳過(guò)來(lái),也許是 GET 也許是 POST,這個(gè)需要開(kāi)發(fā)團(tuán)隊(duì)相互之間約定好,或者制定統(tǒng)一規(guī)范。
2、有了參數(shù),根據(jù)應(yīng)用需求,完成數(shù)據(jù)處理,例如:任務(wù)進(jìn)度更新、APP內(nèi)購(gòu)、一局游戲結(jié)束數(shù)據(jù)提交等等
3、數(shù)據(jù)邏輯處理完之后,返回客戶端所需要用到的相關(guān)數(shù)據(jù),例如:任務(wù)狀態(tài)、內(nèi)購(gòu)結(jié)果、玩家信息等等
數(shù)據(jù)怎么返給客戶端?
直接輸出的形式,如:JSON、XML、TEXT 等等。
4、客戶端獲取到你返回的數(shù)據(jù)后,在客戶端本地和用戶進(jìn)行交互
臨時(shí)寫的一個(gè)簡(jiǎn)單 API 例子:
NULL, 'info'=>'數(shù)據(jù)錯(cuò)誤', '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)); } //假設(shè) $mysql 是數(shù)據(jù)庫(kù) $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)); } //查詢數(shù)據(jù)庫(kù) $userInfo = $mysql[$uid]; //輸出數(shù)據(jù) $output = array( 'data' => array( 'userInfo' => $userInfo, 'isLogin' => true,//是否首次登陸 'unread' => 4,//未讀消息數(shù)量 'untask' => 3,//未完成任務(wù) ), 'info' => 'Here is the message which, commonly used in popup window', //消息提示,客戶端常會(huì)用此作為給彈窗信息。 'code' => 200, //成功與失敗的代碼,一般都是正數(shù)或者負(fù)數(shù) ); exit(json_encode($output)); } elseif ($a == 'get_games_result') { //... die('您正在調(diào) get_games_result 接口!'); } elseif ($a == 'upload_avatars') { //.... die('您正在調(diào) upload_avatars 接口!'); }
對(duì)于客戶端而言,直接調(diào)用這樣的地址:
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
實(shí)際項(xiàng)目中,我們?cè)陂_(kāi)發(fā) API 應(yīng)該注意的幾個(gè)事項(xiàng)(僅供參考):
1、單文件實(shí)現(xiàn)多接口的形式有很多種,例如:if..elseif.. 或 switch 或 動(dòng)態(tài)方法 (也就是TP的這種訪問(wèn)函數(shù)體的形式)
2、對(duì)于數(shù)據(jù)的輸出最好用json,json具有相當(dāng)強(qiáng)大的跨平臺(tái)性,市場(chǎng)上各大主流編程語(yǔ)言都支持json解析,json正在逐步取代xml,成為網(wǎng)絡(luò)數(shù)據(jù)的通用格式
3、接口安全,一定要增加接口驗(yàn)證。例如,客戶端和服務(wù)端針對(duì)不同接口統(tǒng)一做好加密方式,服務(wù)端在對(duì)于每次接口需要都要進(jìn)行驗(yàn)證。以保證防止接口被惡意刷新或黑客惡意調(diào)用,尤其是大型商業(yè)應(yīng)用。
4、對(duì)于線上的 API 必須保證所有接口正常且關(guān)閉所有的錯(cuò)誤信息 => error_reporting(0),在輸出JSON 時(shí),不能有任何其它輸出,否則,客戶端將解析數(shù)據(jù)失敗,直接 Crash!
5、開(kāi)發(fā) API 和 WEB 有一定的區(qū)別,如果是 WEB 的話,可能代碼出錯(cuò)了,不會(huì)導(dǎo)致特別嚴(yán)重的錯(cuò)誤,也許只是導(dǎo)致數(shù)據(jù)寫入和查詢失敗,也許導(dǎo)致 WEB 的某個(gè)部分錯(cuò)位或亂碼。但如果是 API,直接 Crash!
關(guān)于如何用php實(shí)現(xiàn)API問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。