<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>

          如何設(shè)計(jì)API返回碼(錯(cuò)誤碼)?

          共 1552字,需瀏覽 4分鐘

           ·

          2022-01-19 16:00

          程序員的成長(zhǎng)之路
          互聯(lián)網(wǎng)/程序員/技術(shù)/資料共享?
          關(guān)注


          閱讀本文大概需要 2.8 分鐘。

          來自:https://ken.io/note/api-errorcode-or-resultcode-desgin

          一、前言

          客戶端請(qǐng)求 API,通常需要通過返回碼來判斷 API 返回的結(jié)果是否符合預(yù)期,以及該如何處理返回的內(nèi)容等
          相信很多同學(xué)都吃過返回碼定義混亂的虧,有的 API 用返回碼是 int 類型,有的是 string 類型,有的用 0 表示成功,又有的用 1 表示成功,還有用”true” 表示成功,碰上這種事情,只能說:頭疼
          API 返回碼的設(shè)計(jì)還是要認(rèn)真對(duì)待,畢竟好的返回碼設(shè)計(jì)可以降低溝通成本以及程序的維護(hù)成本

          二、HTTP 狀態(tài)碼參考

          以 HTTP 狀態(tài)碼為例,為了更加清晰的表述和區(qū)分狀態(tài)碼的含義,HTTP 狀態(tài)做了分段。
          對(duì)于后端開發(fā)來說,我們通常見到的都是:
          2XX 狀態(tài)碼,比如 200-> 請(qǐng)求成功,
          5XX 狀態(tài)碼,比如 502-> 服務(wù)器異常,通常就是服務(wù)沒正常運(yùn)行,或者代碼執(zhí)行出錯(cuò)
          通過狀態(tài)碼即可初步判斷問題原因,HTTP 狀態(tài)的設(shè)計(jì)思路值得借鑒。

          三、參數(shù)約定

          雖說是返回碼設(shè)計(jì),但是只有 code 是不行的,還要有對(duì)應(yīng)的 message,讓人可以看懂
          參考 HTTP 狀態(tài)碼的思路,我們對(duì)錯(cuò)誤碼進(jìn)行分段
          通過這樣的設(shè)計(jì),不論是程序還是人都可以非常方便的區(qū)分 API 的返回結(jié)果,關(guān)鍵是統(tǒng)一!

          四、個(gè)性化 Message

          通常我們的 message 都是寫給工程師看的,但是在不同的場(chǎng)景下,同樣的錯(cuò)誤,可能需要給用戶看到不一樣的錯(cuò)誤提示。
          比方說 20000-29999 表示訂單創(chuàng)建失敗:
          • 20001,訂單創(chuàng)建失敗,存在進(jìn)行中的訂單

          • 20002,訂單創(chuàng)建失敗,上一個(gè)訂單正在排隊(duì)創(chuàng)建中

          這兩種錯(cuò)誤情況如果是給用戶看,可能就只適合看到:很抱歉,您有一個(gè)正在進(jìn)行中的訂單,請(qǐng)到我的訂單列表中處理。
          但是對(duì)于 API 來說,返回的信息又必須是準(zhǔn)確的,但用戶看到的就必須轉(zhuǎn)譯,這個(gè)轉(zhuǎn)譯的工作調(diào)用方可以做,但是通常 API 提供者來提供個(gè)性化的 Message 能力會(huì)更好
          我們可以把轉(zhuǎn)譯的消息配置到數(shù)據(jù)庫,并緩存到 Redis 或者 API 本機(jī)
          然后在請(qǐng)求處理結(jié)束即將返回的時(shí)候,根據(jù) application_id+code,去匹配替換 message
          這樣我們就可以讓手機(jī) APP 的用戶、微信小程序的用戶、網(wǎng)頁下單的企業(yè)用戶看到不同的消息

          五、返回信息的統(tǒng)一處理

          有了統(tǒng)一的 code,我們就可以通過 Nginx 或者 APM 工具統(tǒng)計(jì) API 請(qǐng)求 Code 數(shù)量及分布信息。
          我們可以根據(jù)單位時(shí)間內(nèi) 99999 的數(shù)量來做 API 的異常告警
          我們可以根據(jù) Code 的返回餅圖,幫助我們發(fā)現(xiàn)系統(tǒng)、業(yè)務(wù)流程中的問題
          等等
          總之,好的返回碼設(shè)計(jì),可以幫助我們提高溝通效率,降低代碼的維護(hù)成本。

          推薦閱讀:

          北大韋神透露現(xiàn)狀:自己課講得不太好,中期學(xué)生退課后就剩下5、6個(gè)人...

          西安一碼通到底是通過后端下發(fā)圖片的嗎?新笑話:CPU轉(zhuǎn)速過高導(dǎo)致內(nèi)存溢出?

          互聯(lián)網(wǎng)初中高級(jí)大廠面試題(9個(gè)G)

          內(nèi)容包含Java基礎(chǔ)、JavaWeb、MySQL性能優(yōu)化、JVM、鎖、百萬并發(fā)、消息隊(duì)列、高性能緩存、反射、Spring全家桶原理、微服務(wù)、Zookeeper、數(shù)據(jù)結(jié)構(gòu)、限流熔斷降級(jí)......等技術(shù)棧!

          ?戳閱讀原文領(lǐng)取!? ? ? ? ? ? ? ??? ??? ? ? ? ? ? ? ? ? ?朕已閱?

          瀏覽 95
          點(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>
                  精品色欲 | 黄片在线免费观看免播放器 | 青青草大香蕉在线 | 免费在线观看V片 | 我要看免费A片 |