開發API接口需要哪些知識?

神聖紀事


個人一直從事Java服務端開發,如今已經是移動端的天下,幾乎每一個C端的項目應該都是前後端分離的,或APP native開發,或H5 web開發,小程序、公眾號開發,這些基本都是前後端分離的項目,也就是需要服務端同學開發API即可,不需要關心前端相關技術棧了,也可以說是技術工種的再一次細分。

那麼作為一個服務端開發人員,開發API接口需要哪些知識呢?個人覺得可以從兩個角度來看:

  1. 自己公司產品開發API

  2. 給第三方開發API,也叫OpenAPI、開放API,很多大公司都有自己的開放平臺

個人認為只有開發好了自己公司的API,才有資格或者有能力開發好開放API!

那麼從開發自己公司API開式,個人覺得需要以下知識點:

響應時間要快

“天下武功,唯快不破”,一個好的API接口響應時間一定要快,多快算快?沒有最快,只有更快!一般公司會要求所有API響應時間不得超過100ms,高併發API再單獨要求,例如不得超過40ms,且吞吐量超過3000tps!

返回的數據格式要穩定

相信做過API開發的同學一定有經驗,由於序列化方式的不同,有時候一個字段沒有值的時候可能會返回如下三種情況:

  1. 這個字段在返回的json串裡沒有了;

  2. 這個字段返回的是一個null;

  3. 這個字段返回的是一個空字符串。

如果你是前端的話,每個接口規則都不一樣,你頭大不大?是不是代碼裡到處都充斥著

if(id && id != null && id != "")

這樣的判斷代碼?一不小心忘記處理了,然後APP的奔潰率就上來了。

文檔要清晰標準

一個好的API一定要有一個好的文檔,API是靈魂的話,文檔就是肉體以及華麗的外表,每一次對接口的更新都要及時反饋到文檔上去並且及時的告知前端開發人員。我平時常用的就是把API文檔寫在wiki上,固定好一個API文檔模板,大家都按照這個規則去寫就好了,這樣前後端聯調時候對照清晰的文檔也會省去很多的溝通成本。切不可因為懶得寫文檔,覺得聯調時候溝通充分就可以了。你要知道隨著時間的推移,這個API很可能就被你忘了,或者接手的同事也無從下手。所以一定要有一個清晰的文檔!

那麼在此基礎上如何開發一個優秀的開放API呢?

個人認為這個大家其實都知道怎麼一回事,因為即使你沒寫過openAPI,你還沒調用過openAPI嗎?微信支付、支付寶支付、極光推送、IM、友盟、OCPC、客服等等第三方應用都需要咱們調用他們的API,看過別人怎麼玩的,咱自己照抄就好了。還有一點想要說的就是:“把握好自己的需求,千萬不要過度設計!”


這裡沒有說具體的技術,實際上把以上工作做好了,關於技術這些自然也就好了,細節註定成敗,大家認為開發一個好的API最重要的事情是什麼?歡迎評論區留言討論~

我是【java架構設計】,關注我,持續為您提供優質內容!


java架構設計


簽名基本原理是通過 key/secret 的實現:

1, 服務器負責為每個客戶端生成一對 key/secret ( key/secret 沒有任何關係,不能相互推算),保存,並告知客戶端。

2, 當客戶端調用 api 時,根據某種規則將所有請求參數串聯起來並用 secret 生成簽名 sign 。

3, 將 sign 和 key 一起放進請求參數對服務器進行調用。(注意 secret 不要傳)

4, 服務端收到請求,根據 key 去查 secret ,然後用同樣的算法,驗證簽名。

5, 為避免重放攻擊,可加上 timestamp 參數,指明客戶端調用的時間。服務端在驗證請求時若 timestamp 超過允許誤差則直接返回錯誤。

---------------------------------------------------------------------------------------------------------

簽名算法過程:

1.對除簽名外的所有請求參數按key做的升序排列,value無需編碼。

 (假設當前時間的時間戳是12345678)

例如:有c=3,b=2,a=1 三個參,另加上時間戳後, 按key排序後為:a=1,b=2,c=3,_timestamp=12345678。

2 把參數名和參數值連接成字符串,得到拼裝字符:a1b2c3_timestamp12345678

3 用申請到的appkey 連接到接拼裝字符串頭部和尾部,然後進行32位MD5加密,最後將到得MD5加密摘要轉化成大寫。

示例:假設appkey=test,md5(testa1b2c3_timestamp12345678test),取得MD5摘要值 C5F3EB5D7DC2748AED89E90AF00081E6 。

------------------------------------------------------------------------------------

 總結:

接口調用方和接口提供方約定好統一的參數加密算法

接口調用方在調用時把加密後的_sign放在參數中去請求接口

接口提供方接到響應後,判斷時間戳是不是在有效時間內(這個時間間隔根據你的安全範圍可以是10分鐘,5分鐘,20秒等,過期失效,前提是需要保證接口提供方和調用方的服務器時間為準確的網絡同步時間)

把參數中除了_sign以外的參數進行加密,然後把加密結果和傳過來的_sign比較,相同則執行調用請求。

 

     md5加密


分享到:


相關文章: