首頁 > 產(chǎn)業(yè) > 直播
開發(fā)API接口需要哪些知識?
個人一直從事Java服務(wù)端開發(fā),如今已經(jīng)是移動端的天下,幾乎每一個C端的項目應(yīng)該都是前后端分離的,或APP native開發(fā),或H5 web開發(fā),小程序、公眾號開發(fā),這些基本都是前后端分離的項目,也就是需要服務(wù)端同學(xué)開發(fā)API即可,不需要關(guān)心前端相關(guān)技術(shù)棧了,也可以說是技術(shù)工種的再一次細分。
那么作為一個服務(wù)端開發(fā)人員,開發(fā)API接口需要哪些知識呢?個人覺得可以從兩個角度來看:
自己公司產(chǎn)品開發(fā)API
給第三方開發(fā)API,也叫OpenAPI、開放API,很多大公司都有自己的開放平臺
個人認為只有開發(fā)好了自己公司的API,才有資格或者有能力開發(fā)好開放API!
那么從開發(fā)自己公司API開式,個人覺得需要以下知識點:
響應(yīng)時間要快“天下武功,唯快不破”,一個好的API接口響應(yīng)時間一定要快,多快算快?沒有最快,只有更快!一般公司會要求所有API響應(yīng)時間不得超過100ms,高并發(fā)API再單獨要求,例如不得超過40ms,且吞吐量超過3000tps!
返回的數(shù)據(jù)格式要穩(wěn)定相信做過API開發(fā)的同學(xué)一定有經(jīng)驗,由于序列化方式的不同,有時候一個字段沒有值的時候可能會返回如下三種情況:
這個字段在返回的json串里沒有了;
這個字段返回的是一個null;
這個字段返回的是一個空字符串。
如果你是前端的話,每個接口規(guī)則都不一樣,你頭大不大?是不是代碼里到處都充斥著
if(id && id != null && id != )這樣的判斷代碼?一不小心忘記處理了,然后APP的奔潰率就上來了。
文檔要清晰標(biāo)準(zhǔn)一個好的API一定要有一個好的文檔,API是靈魂的話,文檔就是肉體以及華麗的外表,每一次對接口的更新都要及時反饋到文檔上去并且及時的告知前端開發(fā)人員。我平時常用的就是把API文檔寫在wiki上,固定好一個API文檔模板,大家都按照這個規(guī)則去寫就好了,這樣前后端聯(lián)調(diào)時候?qū)φ涨逦奈臋n也會省去很多的溝通成本。切不可因為懶得寫文檔,覺得聯(lián)調(diào)時候溝通充分就可以了。你要知道隨著時間的推移,這個API很可能就被你忘了,或者接手的同事也無從下手。所以一定要有一個清晰的文檔!
那么在此基礎(chǔ)上如何開發(fā)一個優(yōu)秀的開放API呢?個人認為這個大家其實都知道怎么一回事,因為即使你沒寫過openAPI,你還沒調(diào)用過openAPI嗎?微信支付、支付寶支付、極光推送、IM、友盟、OCPC、客服等等第三方應(yīng)用都需要咱們調(diào)用他們的API,看過別人怎么玩的,咱自己照抄就好了。還有一點想要說的就是:“把握好自己的需求,千萬不要過度設(shè)計!”
這里沒有說具體的技術(shù),實際上把以上工作做好了,關(guān)于技術(shù)這些自然也就好了,細節(jié)注定成敗,大家認為開發(fā)一個好的API最重要的事情是什么?歡迎評論區(qū)留言討論~
我是【java架構(gòu)設(shè)計】,關(guān)注我,持續(xù)為您提供優(yōu)質(zhì)內(nèi)容!
(1)公主連結(jié)wiki:
簽名基本原理是通過 key/secret 的實現(xiàn):1, 服務(wù)器負責(zé)為每個客戶端生成一對 key/secret ( key/secret 沒有任何關(guān)系,不能相互推算),保存,并告知客戶端。
2, 當(dāng)客戶端調(diào)用 api 時,根據(jù)某種規(guī)則將所有請求參數(shù)串聯(lián)起來并用 secret 生成簽名 sign 。
3, 將 sign 和 key 一起放進請求參數(shù)對服務(wù)器進行調(diào)用。(注意 secret 不要傳)
4, 服務(wù)端收到請求,根據(jù) key 去查 secret ,然后用同樣的算法,驗證簽名。
5, 為避免重放攻擊,可加上 timestamp 參數(shù),指明客戶端調(diào)用的時間。服務(wù)端在驗證請求時若 timestamp 超過允許誤差則直接返回錯誤。
---------------------------------------------------------------------------------------------------------
簽名算法過程:
1.對除簽名外的所有請求參數(shù)按key做的升序排列,value無需編碼。
?(假設(shè)當(dāng)前時間的時間戳是12345678)
例如:有c=3,b=2,a=1 三個參,另加上時間戳后, 按key排序后為:a=1,b=2,c=3,_timestamp=12345678。
2 把參數(shù)名和參數(shù)值連接成字符串,得到拼裝字符:a1b2c3_timestamp12345678
3 用申請到的appkey 連接到接拼裝字符串頭部和尾部,然后進行32位MD5加密,最后將到得MD5加密摘要轉(zhuǎn)化成大寫。
示例:假設(shè)appkey=test,md5(testa1b2c3_timestamp12345678test),取得MD5摘要值?C5F3EB5D7DC2748AED89E90AF00081E6?。
------------------------------------------------------------------------------------
?總結(jié):
接口調(diào)用方和接口提供方約定好統(tǒng)一的參數(shù)加密算法
接口調(diào)用方在調(diào)用時把加密后的_sign放在參數(shù)中去請求接口
接口提供方接到響應(yīng)后,判斷時間戳是不是在有效時間內(nèi)(這個時間間隔根據(jù)你的安全范圍可以是10分鐘,5分鐘,20秒等,過期失效,前提是需要保證接口提供方和調(diào)用方的服務(wù)器時間為準(zhǔn)確的網(wǎng)絡(luò)同步時間)
把參數(shù)中除了_sign以外的參數(shù)進行加密,然后把加密結(jié)果和傳過來的_sign比較,相同則執(zhí)行調(diào)用請求。
?
? ? ?md5加密
上一篇:好的網(wǎng)頁游戲?
下一篇:warframe的劇情是什么?
強推



