佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > PHP服務(wù)器端API原理及示例講解(接口開發(fā))

PHP服務(wù)器端API原理及示例講解(接口開發(fā))

熱門標(biāo)簽:阿里云 團購網(wǎng)站 Linux服務(wù)器 銀行業(yè)務(wù) Mysql連接數(shù)設(shè)置 電子圍欄 服務(wù)器配置 科大訊飛語音識別系統(tǒng)

相信大家都做過PHP請求API接口獲取數(shù)據(jù),比如淘寶API,微信公眾平臺,天氣查詢,快遞查詢等,有的需要參照接口文檔根據(jù)簽名算法構(gòu)造sign(簽名),或者設(shè)置token,然后通過curl發(fā)送POST請求帶上參數(shù),獲得返回數(shù)據(jù),一般是json或者xml格式。

但是現(xiàn)在的情況反過來了,我們要開發(fā)PHP服務(wù)器端的API接口,也就是別人請求我們,我們驗證請求合法性,并查詢數(shù)據(jù)返回。

這種情況其實在手機app開發(fā)中用到,手機APP應(yīng)用往往需要請求PHP接口獲取數(shù)據(jù),不過這個請求一般是不用經(jīng)過驗證的,根據(jù)不同的功能請求不同的url,通常也是get方式傳參數(shù)直接獲取數(shù)據(jù)。

本文簡單講講服務(wù)器端驗證請求合法性的方法,和接收參數(shù)的方式。

簡單的get請求如:http://www.demo.com/api/get_cat?id=2,請求這個網(wǎng)址會返回一些數(shù)據(jù),無論是誰用什么編程語言請求都能得到數(shù)據(jù)。

那么在需要驗證合法性的情況下這樣顯然是不行的。所以需要一個秘鑰,這個時候往往用POST方式請求url。

比如傳遞的參數(shù)中有個簽名sign,值是98888,當(dāng)然生成sign的方式很多而且不可能這么簡單,這里只是隨便寫,那么服務(wù)器端接收到sign是98888,假如我們約定98888就是合法的,這個時候判斷sign是否為98888就可以驗證這是合法請求了。

但是這樣也太簡單了,一下子就被破解了,設(shè)置這個sign就毫無意義了。所以要有一個生成sign的規(guī)則,請求的時候根據(jù)這個規(guī)則生成sign傳參,服務(wù)器端接收的時候也根據(jù)這個規(guī)則生成sign,如果生成的sign一致,表明這是合法請求。每次請求都會帶上sign進行驗證。

還有一種驗證叫token,第一次請求的時候驗證token,在一定時間內(nèi)不用再次驗證。這要分兩步,第一步先請求獲取token的接口得到token,第二步才是請求具體接口的功能,需要帶上token傳參。由于第一次請求token的時候,服務(wù)器端先把token存儲起來了再返回的,所以后面的請求判斷傳過來的token是否存在就可以驗證了。

許多接口開發(fā)都同時使用兩者方式保證私密和安全。

還有一點,發(fā)送POST請求往往使用PHP的CURL模塊,比如對方通過curl發(fā)送POST請求,curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string),這里$post_string是傳PHP數(shù)組的形式好,還是json格式呢?

如果是傳PHP數(shù)組,我這邊直接$_POST[‘xx']獲取參數(shù),如果是傳的json格式,我這邊好像要用file_get_contents(‘php://input', ‘r')獲取傳過來的json數(shù)據(jù),然后解析json得到參數(shù)。

什么情況下用第二種?

這個曾經(jīng)在網(wǎng)上提問過,看看大家怎么回答:

對PHP來說 JSON和數(shù)組有時候真的只是一行代碼的區(qū)別,如果我寫可能直接回用第一種。

我覺得你想你的代碼簡潔一點可以用第二種,我記得weixin的php sdk好像類似就是第二種(當(dāng)然那是xml格式)

還有如果對方使用面向?qū)ο笾苯有蛄谢鰜淼膉son的話,用json會讓他的代碼更簡潔一點。

第一種做法,是傳輸?shù)氖莊orm表單POST協(xié)議,PHP會把PHP數(shù)組變成HTTP表單的格式,跨語言通用,但是這種并不是主流的API協(xié)議,而更像是模擬提交表單。

絕大多數(shù)API協(xié)議會用JSON POST,第二種做法,即在HTTP Body里放JSON數(shù)據(jù)。也是跨語言的,但作為API更友好。

第一種方法,直接PHP curl,如果數(shù)據(jù)內(nèi)容沒處理好,數(shù)組value里傳了 @/xxx/xxx 這樣的內(nèi)容,curl會把服務(wù)器上的本地文件傳出去,注意防范。

x-www-form-urlencoded是RFC標(biāo)準(zhǔn),沒什么不兼容的,豈止跨語言,還跨越時空。JSON這種是近幾年想出來的,不是標(biāo)準(zhǔn),用著方便而已。

以上這篇PHP服務(wù)器端API原理及示例講解(接口開發(fā))就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 如何用PHP編寫簡單的api數(shù)據(jù)接口
  • php的api數(shù)據(jù)接口書寫實例(推薦)
  • PHP保姆級API制作教程,不會剁手

標(biāo)簽:衢州 萍鄉(xiāng) 廣元 江蘇 衡水 蚌埠 棗莊 大理

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP服務(wù)器端API原理及示例講解(接口開發(fā))》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    都匀市| 铜陵市| 融水| 湛江市| 揭东县| 乌恰县| 会同县| 临泉县| 四子王旗| 凉城县| 葵青区| 汶川县| 弋阳县| 广宗县| 福州市| 晴隆县| 喀喇沁旗| 东港市| 平江县| 湘乡市| 佛坪县| 贵阳市| 平泉县| 肇州县| 盐城市| 和龙市| 宁德市| 江源县| 正定县| 和政县| 北流市| 荆门市| 铅山县| 运城市| 西贡区| 溆浦县| 岳池县| 九龙城区| 通化市| 开原市| 巢湖市|