日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

api接口设计

發(fā)布時(shí)間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 api接口设计 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

api接口設(shè)計(jì)

健壯性

  • 對(duì)外提供的接口,最好支持冪等性,即相同的請(qǐng)求重復(fù)調(diào)用,服務(wù)端的操作應(yīng)該只有一次,并且每次返回的結(jié)果應(yīng)該是一樣的。
    一般的做法是要求客戶端在每次調(diào)用的時(shí)候帶上唯一鍵,服務(wù)端第一次正常處理,并緩存唯一鍵和結(jié)果,后面再有重復(fù)調(diào)用,即可直接獲取緩存結(jié)果返回。
    如果客戶端沒(méi)有唯一鍵的條件,也可以要求傳時(shí)間戳,用時(shí)間戳作為唯一鍵。
  • 對(duì)外的接口,粒度能細(xì)就細(xì),最好不要是那種入?yún)⑹莟ype,然后服務(wù)端根據(jù)type類型返回不同的數(shù)據(jù),這樣容易被調(diào)用方猜到一些服務(wù)端不想暴漏的內(nèi)容。
    舉個(gè)例子,比如你要對(duì)外提供字典接口。 你的service方法是入?yún)ype, type=country,就返回所有國(guó)家字典;
    type=currency,就返回所有幣種字典。
    其實(shí)你只想對(duì)外暴漏這兩個(gè)功能,但其實(shí)你的service還支持type=company,就返回所有公司,
    這個(gè)你是不想對(duì)外暴漏的,但有可能會(huì)被調(diào)用方猜到,從而獲取了隱私數(shù)據(jù)。
    所以這種情況,就應(yīng)該把接口拆開(kāi),比如獲取國(guó)家就是一個(gè)接口,獲取幣種就是另外一個(gè)接口。
  • 接口的入?yún)?#xff0c;最好是包好的dto,這個(gè)不用多說(shuō),接口升級(jí)的時(shí)候,不會(huì)影響到用舊版本的客戶端,便于擴(kuò)展。
  • 接口的出參,盡可能的少,沒(méi)用的字段一定不要加,因?yàn)榭紤]到以后接口維護(hù)的時(shí)候,加字段好加,減字段可不好減。
  • 接口的出參,服務(wù)不要把異常直接拋出來(lái),一定要加全局異常捕獲,明確指定不同類型的出參碼,比如調(diào)用錯(cuò)誤是什么,參數(shù)錯(cuò)誤是什么等等。
  • 單一職責(zé),一個(gè)接口應(yīng)該是專門(mén)給一個(gè)功能或者一類特定功能用的,避免接口復(fù)用,這個(gè)也是擴(kuò)展性問(wèn)題。
  • 命名要統(tǒng)一,一定要有全局意識(shí)。比如所有的查詢都是find開(kāi)頭,所有的查列表都是以list結(jié)尾,所有的分頁(yè)都是currentPage+pageSize等等
  • 命名要準(zhǔn)確,隨便用漢字拼音首字母命名都是一種不負(fù)責(zé)任的做法
  • 安全性

  • 上面有提到用時(shí)間戳作為請(qǐng)求唯一鍵,可以做冪等。其實(shí)用時(shí)間戳,還有個(gè)好處,就是可以判斷是不是截取url的惡意調(diào)用。
    因?yàn)槲覀兛梢耘袛喈?dāng)前時(shí)間和時(shí)間戳的間隔,如果大于某個(gè)值,比如大于5秒,我們就判定這個(gè)url無(wú)效。 這樣可以有效的抵擋一部分的DOS攻擊。
  • 如果調(diào)用方很確定,并且數(shù)量不多的話,直接配置ip白名單,簡(jiǎn)單高效。
  • 再?gòu)?fù)雜的設(shè)計(jì),比如簽名驗(yàn)證,但個(gè)人覺(jué)得這個(gè)普通場(chǎng)景沒(méi)什么必要,增加復(fù)雜度,
    但安全度極高的場(chǎng)景,是必加的,而且至少要token+時(shí)間戳的簽名,token是客戶端的身份證明。
  • 總結(jié)

    以上是生活随笔為你收集整理的api接口设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。