<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          3條原則,16 個(gè)小點(diǎn),幫你寫出一個(gè)優(yōu)秀的對(duì)外接口!

          共 2306字,需瀏覽 5分鐘

           ·

          2022-04-10 00:52

          點(diǎn)擊下方“IT牧場(chǎng)”,選擇“設(shè)為星標(biāo)”

          來源:blog.csdn.net/weixin_42304845/article/

          details/109305740

          對(duì)外API接口設(shè)計(jì)

          • 安全性
            • 1、創(chuàng)建appid,appkey和appsecret
            • 2、Token:令牌(過期失效)
            • 3、Post請(qǐng)求
            • 4、客戶端IP白名單 (可選)
            • 5、單個(gè)接口針對(duì)IP限流(令牌桶限流,漏桶限流,計(jì)數(shù)器限流)
            • 6、記錄接口請(qǐng)求日志
            • 7、采用Https
            • 8、數(shù)據(jù)合法性校驗(yàn)
            • 9、密碼查詢(加緩存,key使用客戶號(hào))
            • 10、接口調(diào)用失敗告警
            • 11、高可用:服務(wù)器集群部署(2-3)
            • 12、變更軌跡,保存上次密碼?
            • 13、查詢密碼和交易密碼是否分兩條?
          • 冪等性
          • 數(shù)據(jù)規(guī)范
            • 版本控制
            • 響應(yīng)狀態(tài)碼規(guī)范
            • 統(tǒng)一響應(yīng)數(shù)據(jù)格式

          安全性

          1、創(chuàng)建appid,appkey和appsecret

          • appid:應(yīng)用的唯一標(biāo)識(shí)
          • appkey:公鑰=賬號(hào)
          • appsecret:私鑰=密碼

          1、設(shè)計(jì)一個(gè)認(rèn)證系統(tǒng),專用于創(chuàng)建第三方接入應(yīng)用的賬號(hào)信息,用于生成appid,appkey和appsecret,然后發(fā)appkey和appsecret給第三方接入應(yīng)用,用于做認(rèn)證

          ps:appkey和appsecret成對(duì)出現(xiàn)的機(jī)制,目的在于首次驗(yàn)證(類似登錄場(chǎng)景),用來申請(qǐng)一個(gè)token,之后請(qǐng)求數(shù)據(jù)請(qǐng)求,就直接帶token請(qǐng)求服務(wù)端認(rèn)證即可。

          2、第三方接入應(yīng)用自行注冊(cè),需要校驗(yàn)企業(yè)信息合法性(暫不考慮)

          2、Token:令牌(過期失效)

          1、第三方接入應(yīng)用獲取第一步中的appkey和appsecret

          2、請(qǐng)求認(rèn)證系統(tǒng)獲取nonce隨機(jī)數(shù),服務(wù)端在緩存中存放下nonce

          3、客戶端拿到這個(gè)隨機(jī)數(shù)后將其與appsecret拼接生appsecretStr,然后調(diào)用生成簽名方法,傳入appsecretStr,appkey,nonce,url(備注:可轉(zhuǎn)大寫,轉(zhuǎn)小寫,追加特殊字符,然后加密)進(jìn)行非可逆加密(MD5/SHA1等),生成簽名A。接著構(gòu)造請(qǐng)求把簽名放到請(qǐng)求頭signature,post請(qǐng)求體中放入?yún)?shù):appkey,nonce,timestamp,url根據(jù)request.getRequestURI()獲取,調(diào)用認(rèn)證接口

          4、認(rèn)證系統(tǒng)獲取請(qǐng)求后,查詢根據(jù)appkey查詢緩存中的nonce,判斷是否存在,不存在則提示不合法請(qǐng)求;判斷是否相等,不等則為惡意請(qǐng)求。

          判斷timestamp的時(shí)效性,防止惡意請(qǐng)求:數(shù)據(jù)包中的客戶端時(shí)間戳字段,然后用服務(wù)器當(dāng)前時(shí)間去減客戶端時(shí)間,看結(jié)果是否在一個(gè)區(qū)間內(nèi)。

          先根據(jù)appkey查詢數(shù)據(jù)庫(kù),判斷是否存在,如不存在則提示不合法用戶;反之,查出appsecret,按照客戶端的簽名加密方式,進(jìn)行加密,生成簽名B,比較A和B,如果一樣則生成token,失效緩存中的nonce,返回token。

          3、Post請(qǐng)求

          4、客戶端IP白名單 (可選)

          5、單個(gè)接口針對(duì)IP限流(令牌桶限流,漏桶限流,計(jì)數(shù)器限流)

          限流是為了更好的維護(hù)系統(tǒng)穩(wěn)定性。使用redis進(jìn)行接口調(diào)用次數(shù)統(tǒng)計(jì),ip+接口地址作為key,訪問次數(shù)作為value,每次請(qǐng)求value+1,設(shè)置過期時(shí)長(zhǎng)來限制接口的調(diào)用頻率

          6、記錄接口請(qǐng)求日志

          使用aop全局記錄請(qǐng)求日志,快速定位異常請(qǐng)求位置,排查問題原因。

          7、采用Https

          1、服務(wù)端配置SSL證書

          2、客戶端調(diào)用https工具類忽略服務(wù)端證書校驗(yàn)

          8、數(shù)據(jù)合法性校驗(yàn)

          9、密碼查詢(加緩存,key使用客戶號(hào))

          1、密碼更新時(shí),更新redis;

          2、緩存查不到,查數(shù)據(jù)庫(kù),同時(shí)更新緩存;

          3、密碼在緩存和數(shù)據(jù)庫(kù)都需要加密,返回時(shí)才解密(或者是返回客戶端時(shí),客戶端自行解密)

          10、接口調(diào)用失敗告警

          11、高可用:服務(wù)器集群部署(2-3)

          客戶端重試機(jī)制

          12、變更軌跡,保存上次密碼?

          13、查詢密碼和交易密碼是否分兩條?

          冪等性

          冪等性是指任意多次請(qǐng)求的執(zhí)行結(jié)果和一次請(qǐng)求的執(zhí)行結(jié)果所產(chǎn)生的影響相同。說的直白一點(diǎn)就是查詢操作無論查詢多少次都不會(huì)影響數(shù)據(jù)本身,因此查詢操作本身就是冪等的。但是新增操作,每執(zhí)行一次數(shù)據(jù)庫(kù)就會(huì)發(fā)生變化,所以它是非冪等的。

          冪等問題的解決有很多思路,這里講一種比較嚴(yán)謹(jǐn)?shù)摹L峁┮粋€(gè)生成隨機(jī)數(shù)的接口,隨機(jī)數(shù)全局唯一。調(diào)用接口的時(shí)候帶入隨機(jī)數(shù)。

          第一次調(diào)用,業(yè)務(wù)處理成功后,將隨機(jī)數(shù)作為key,操作結(jié)果作為value,存入redis,同時(shí)設(shè)置過期時(shí)長(zhǎng)。

          第二次調(diào)用,查詢r(jià)edis,如果key存在,則證明是重復(fù)提交,直接返回錯(cuò)誤。

          數(shù)據(jù)規(guī)范

          版本控制

          一套成熟的API文檔,一旦發(fā)布是不允許隨意修改接口的。這時(shí)候如果想新增或者修改接口,就需要加入版本控制,版本號(hào)可以是整數(shù)類型,也可以是浮點(diǎn)數(shù)類型。一般接口地址都會(huì)帶上版本號(hào),http://ip:port//v1/list

          響應(yīng)狀態(tài)碼規(guī)范

          統(tǒng)一響應(yīng)數(shù)據(jù)格式

          為了方便給客戶端響應(yīng),響應(yīng)數(shù)據(jù)會(huì)包含三個(gè)屬性,狀態(tài)碼(code)、信息描述(message)、響應(yīng)數(shù)據(jù)(data)。客戶端根據(jù)狀態(tài)碼及信息描述可快速知道接口,如果狀態(tài)碼返回成功,再開始處理數(shù)據(jù)。

          響應(yīng)結(jié)果定義及常用方法:

          干貨分享

          最近將個(gè)人學(xué)習(xí)筆記整理成冊(cè),使用PDF分享。關(guān)注我,回復(fù)如下代碼,即可獲得百度盤地址,無套路領(lǐng)取!

          ?001:《Java并發(fā)與高并發(fā)解決方案》學(xué)習(xí)筆記;?002:《深入JVM內(nèi)核——原理、診斷與優(yōu)化》學(xué)習(xí)筆記;?003:《Java面試寶典》?004:《Docker開源書》?005:《Kubernetes開源書》?006:《DDD速成(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)速成)》?007:全部?008:加技術(shù)群討論

          加個(gè)關(guān)注不迷路

          喜歡就點(diǎn)個(gè)"在看"唄^_^


          瀏覽 17
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩老熟| 无码内射在线播放 | 成人黄色AV网址 | 五月丁香狠狠爱 | 日本美女操逼视频 |