你好!
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比瀍河網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式瀍河網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋瀍河地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
把傳統(tǒng)的PHP Web接口改成符合RESTful風(fēng)格的Web接口有什么用處?
其實,這里最好用“好處”這個詞來代替“用處”,因為傳統(tǒng)的Web接口實現(xiàn)方式同樣能夠?qū)崿F(xiàn)業(yè)務(wù)需要(所以這不是一個必須的事情,需要自己根據(jù)業(yè)務(wù)需求綜合判斷是否需要采用),而改用“RESTful風(fēng)格”會有一些額外的“好處”:
統(tǒng)一的風(fēng)格能夠讓各方更加便利的進行交互,也帶來了更好的兼容性(這是一個所有遵循一定規(guī)范所帶來的共通的好處,就像大家都說普通話,交流起來多方便?。?/p>
對資源的操作正好對應(yīng)相應(yīng)的HTTP動作(GET、POST、PUT、DELETE),而這些動作正好可以滿足我們對資源狀態(tài)進行操作的需要,也就是說想對資源狀態(tài)進行什么樣的操作就選擇什么樣的動作,而這些動作又是HTTP協(xié)議本身提供的,多么和諧自然?。ň褪穷}主的摘錄內(nèi)容)
請求所造成的影響明確,或者說副作用明確,比如GET肯定是安全的,PUT和DELETE肯定是冪等得,POST肯定是不安全的(這里的肯定是建立在API設(shè)計完全遵循“RESTful風(fēng)格”基礎(chǔ)上的)
良好的符合“RESTful風(fēng)格”的URI設(shè)計,可以讓W(xué)eb接口的功能和整體結(jié)構(gòu)更加清晰,僅僅通過URI就能方便的推測出來接口是做什么的,以及多個資源之間關(guān)聯(lián)性
利用HTTP內(nèi)容協(xié)商(content negotiation)實現(xiàn)資源的多重表述,比如請求方可以把自己需要的格式放到頭信息的Accept字段中表述(如Accept: text/json),這樣同樣一個URI就可以輸出多種格式而不再需要在URI里面特別加上一個type=json的參數(shù)了
客戶端、代理服務(wù)器等可以根據(jù)HTTP協(xié)議規(guī)范進行相應(yīng)的額外處理,比如Cache
希望能夠幫到你!
使用PHP寫api接口是經(jīng)常做的,PHP寫好接口后,前臺就可以通過鏈接獲取接口提供的數(shù)據(jù),而返回的數(shù)據(jù)一般分為兩種情況,xml和json,在這個過程中,服務(wù)器并不知道,請求的來源是什么,有可能是別人非法調(diào)用我們的接口,獲取數(shù)據(jù),因此就要使用安全驗證
原理
從圖中可以看得很清楚,前臺想要調(diào)用接口,需要使用幾個參數(shù)生成簽名。
時間戳:當(dāng)前時間
隨機數(shù):隨機生成的隨機數(shù)
口令:前后臺開發(fā)時,一個雙方都知道的標(biāo)識,相當(dāng)于暗號
算法規(guī)則:商定好的運算規(guī)則,上面三個參數(shù)可以利用算法規(guī)則生成一個簽名。前臺生成一個簽名,當(dāng)需要訪問接口的時候,把時間戳,隨機數(shù),簽名通過URL傳遞到后臺。后臺拿到時間戳,隨機數(shù)后,通過一樣的算法規(guī)則計算出簽名,然后和傳遞過來的簽名進行對比,一樣的話,返回數(shù)據(jù)。
算法規(guī)則
在前后臺交互中,算法規(guī)則是非常重要的,前后臺都要通過算法規(guī)則計算出簽名,至于規(guī)則怎么制定,看你怎么高興怎么來。
我這個算法規(guī)則是
時間戳,隨機數(shù),口令按照首字母大小寫順序排序
然后拼接成字符串
進行sha1加密
再進行MD5加密
轉(zhuǎn)換成大寫。
1.制定規(guī)范
開發(fā)前一定要定好一個規(guī)范,比如要定好數(shù)據(jù)返回的通用參數(shù)和格式。關(guān)于數(shù)據(jù)格式,用的比較多的有xml和json,我建議用json,因為json比xml的好處更多。
2.精簡的返回數(shù)據(jù)
接口數(shù)據(jù)因符合需要什么返回什么的原則,比如要查詢某個用戶的余額和注冊時間,網(wǎng)頁里面的做法可能是select * from user where uid=1,但是接口一定要select balance,regtime from user where uid=1。因為接口返回數(shù)據(jù)是要有開銷的,要流量的,能少返回數(shù)據(jù)就盡量少返回,這樣可以大大的提高性能。
3.數(shù)據(jù)類型要嚴格
要注意數(shù)據(jù)的類型,整數(shù)類型的數(shù)據(jù)一定要轉(zhuǎn)為int,因為app客戶端開發(fā)的java、object-c語言對數(shù)據(jù)類型比較嚴格,類型不對會照成app閃退。
4.要寫接口文檔
一定要寫好接口文檔,并按照模塊寫,而且還要書寫規(guī)范,最好的格式是:
接口請求地址;請求參數(shù)(包括參數(shù)名、類型、是否必填);測試參數(shù)舉例;返回參數(shù)(參數(shù)名,并注明每個參數(shù)的含義)。
這樣哪怕以后項目很大,以不會照成維護困難的問題。
5.保證代碼正確性
要驗證保證代碼正確無誤,而且生成環(huán)境中要屏蔽掉錯誤,避免頭部有額外的輸出,照成返回的json等數(shù)據(jù)解析失敗而導(dǎo)致app閃退等。
6.要優(yōu)化代碼的性能
app要求響應(yīng)迅速,這樣才能給用戶比較好的體驗感。所以移動接口端在處理業(yè)務(wù)邏輯的時候,要避免不要執(zhí)行太復(fù)雜的sql語句,或者含有大量的循環(huán),能做成緩存的盡量做緩存,比如將首頁的熱點模塊信息可以存到redis緩存中。在不考慮網(wǎng)速的情況下,比較理想的接口響應(yīng)時間應(yīng)該是200毫秒以內(nèi)。
7.不要隨意更改舊接口
app不像網(wǎng)頁,app一旦發(fā)布,有人使用之后,接口就不要亂修改了。以后升級也是,修改要在保證接口原有結(jié)構(gòu)之上進行額外的擴展,否則會導(dǎo)致調(diào)用舊版接口的app出現(xiàn)bug。
8. 注意接口的安全
安全高于一切,必須要保證接口的安全。電話號碼等敏感信息在傳輸?shù)倪^程中一定要加密,否則可能會被別人抓包到。拿取用戶信息的接口一定要驗證權(quán)限,以防止接口被惡意調(diào)用,泄密用戶信息,甚至篡改信息。
接口的流程.
建立控制器(訪問地址)-審核訪問者身份(token)-驗證提交數(shù)據(jù)是否符合類型(validate
)-處理接收數(shù)據(jù)(邏輯流程)-返回結(jié)果(json字符串).
其中要注意是否存在跨域,如果跨域要做跨域處理,例如返回jsonp.