国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何設(shè)計(jì)一個(gè)牛逼的API接口

這篇具有很好參考價(jià)值的文章主要介紹了如何設(shè)計(jì)一個(gè)牛逼的API接口。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在日常開發(fā)中,總會(huì)接觸到各種接口。前后端數(shù)據(jù)傳輸接口,第三方業(yè)務(wù)平臺(tái)接口。一個(gè)平臺(tái)的前后端數(shù)據(jù)傳輸接口一般都會(huì)在內(nèi)網(wǎng)環(huán)境下通信,而且會(huì)使用安全框架,所以安全性可以得到很好的保護(hù)。這篇文章重點(diǎn)討論一下提供給第三方平臺(tái)的業(yè)務(wù)接口應(yīng)當(dāng)如何設(shè)計(jì)?我們應(yīng)該考慮哪些問題?

如何設(shè)計(jì)一個(gè)牛逼的API接口

主要從以上三個(gè)方面來設(shè)計(jì)一個(gè)安全的API接口。

一 安全性問題

安全性問題是一個(gè)接口必須要保證的規(guī)范。如果接口保證不了安全性,那么你的接口相當(dāng)于直接暴露在公網(wǎng)環(huán)境中任人蹂躪。

1.1 調(diào)用接口的先決條件-token

獲取token一般會(huì)涉及到幾個(gè)參數(shù)appidappkey,timestampnonce,sign。我們通過以上幾個(gè)參數(shù)來獲取調(diào)用系統(tǒng)的憑證。

appidappkey可以直接通過平臺(tái)線上申請(qǐng),也可以線下直接頒發(fā)。appid是全局唯一的,每個(gè)appid將對(duì)應(yīng)一個(gè)客戶,appkey需要高度保密。

timestamp是時(shí)間戳,使用系統(tǒng)當(dāng)前的unix時(shí)間戳。時(shí)間戳的目的就是為了減輕DOS攻擊。防止請(qǐng)求被攔截后一直嘗試請(qǐng)求接口。服務(wù)器端設(shè)置時(shí)間戳閥值,如果請(qǐng)求時(shí)間戳和服務(wù)器時(shí)間超過閥值,則響應(yīng)失敗。

nonce是隨機(jī)值。隨機(jī)值主要是為了增加sign的多變性,也可以保護(hù)接口的冪等性,相鄰的兩次請(qǐng)求nonce不允許重復(fù),如果重復(fù)則認(rèn)為是重復(fù)提交,響應(yīng)失敗。

sign是參數(shù)簽名,將appkeytimestamp,nonce拼接起來進(jìn)行md5加密(當(dāng)然使用其他方式進(jìn)行不可逆加密也沒問題)。

token,使用參數(shù)appid,timestamp,nonce,sign來獲取token,作為系統(tǒng)調(diào)用的唯一憑證。token可以設(shè)置一次有效(這樣安全性更高),也可以設(shè)置時(shí)效性,這里推薦設(shè)置時(shí)效性。如果一次有效的話這個(gè)接口的請(qǐng)求頻率可能會(huì)很高。token推薦加到請(qǐng)求頭上,這樣可以跟業(yè)務(wù)參數(shù)完全區(qū)分開來。

1.2 使用POST作為接口請(qǐng)求方式

一般調(diào)用接口最常用的兩種方式就是GET和POST。兩者的區(qū)別也很明顯,GET請(qǐng)求會(huì)將參數(shù)暴露在瀏覽器URL中,而且對(duì)長度也有限制。為了更高的安全性,所有接口都采用POST方式請(qǐng)求。

1.3 客戶端IP白名單

ip白名單是指將接口的訪問權(quán)限對(duì)部分ip進(jìn)行開放。這樣就能避免其他ip進(jìn)行訪問攻擊,設(shè)置ip白名單比較麻煩的一點(diǎn)就是當(dāng)你的客戶端進(jìn)行遷移后,就需要重新聯(lián)系服務(wù)提供者添加新的ip白名單。設(shè)置ip白名單的方式很多,除了傳統(tǒng)的防火墻之外,spring cloud alibaba提供的組件sentinel也支持白名單設(shè)置。為了降低api的復(fù)雜度,推薦使用防火墻規(guī)則進(jìn)行白名單設(shè)置。

1.4 單個(gè)接口針對(duì)ip限流

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

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

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

1.6 敏感數(shù)據(jù)脫敏

在接口調(diào)用過程中,可能會(huì)涉及到訂單號(hào)等敏感數(shù)據(jù),這類數(shù)據(jù)通常需要脫敏處理,最常用的方式就是加密。加密方式使用安全性比較高的RSA非對(duì)稱加密。非對(duì)稱加密算法有兩個(gè)密鑰,這兩個(gè)密鑰完全不同但又完全匹配。只有使用匹配的一對(duì)公鑰和私鑰,才能完成對(duì)明文的加密和解密過程。

?

二 冪等性問題

冪等性是指任意多次請(qǐng)求的執(zhí)行結(jié)果和一次請(qǐng)求的執(zhí)行結(jié)果所產(chǎn)生的影響相同。說的直白一點(diǎn)就是查詢操作無論查詢多少次都不會(huì)影響數(shù)據(jù)本身,因此查詢操作本身就是冪等的。但是新增操作,每執(zhí)行一次數(shù)據(jù)庫就會(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í)長。第二次調(diào)用,查詢r(jià)edis,如果key存在,則證明是重復(fù)提交,直接返回錯(cuò)誤。

三 數(shù)據(jù)規(guī)范問題

3.1 版本控制

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

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

一個(gè)牛逼的API,還需要提供簡單明了的響應(yīng)值,根據(jù)狀態(tài)碼就可以大概知道問題所在。我們采用http的狀態(tài)碼進(jìn)行數(shù)據(jù)封裝,例如200表示請(qǐng)求成功,4xx表示客戶端錯(cuò)誤,5xx表示服務(wù)器內(nèi)部發(fā)生錯(cuò)誤。狀態(tài)碼設(shè)計(jì)參考如下:

分類 描述
1xx 信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作
2xx 成功
3xx 重定向,需要進(jìn)一步的操作以完成請(qǐng)求
4xx 客戶端錯(cuò)誤,請(qǐng)求包含語法錯(cuò)誤或無法完成請(qǐng)求
5xx 服務(wù)端錯(cuò)誤

狀態(tài)碼枚舉類:

public?enum?CodeEnum?{

????//?根據(jù)業(yè)務(wù)需求進(jìn)行添加
????SUCCESS(200,"處理成功"),
????ERROR_PATH(404,"請(qǐng)求地址錯(cuò)誤"),
????ERROR_SERVER(505,"服務(wù)器內(nèi)部發(fā)生錯(cuò)誤");
????
????private?int?code;
????private?String?message;
????
????CodeEnum(int?code,?String?message)?{
????????this.code?=?code;
????????this.message?=?message;
????}

????public?int?getCode()?{
????????return?code;
????}

????public?void?setCode(int?code)?{
????????this.code?=?code;
????}

????public?String?getMessage()?{
????????return?message;
????}

????public?void?setMessage(String?message)?{
????????this.message?=?message;
????}
}

3.3 統(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é)果定義及常用方法:

public?class?R?implements?Serializable?{

????private?static?final?long?serialVersionUID?=?793034041048451317L;

????private?int?code;
????private?String?message;
????private?Object?data?=?null;

????public?int?getCode()?{
????????return?code;
????}
????public?void?setCode(int?code)?{
????????this.code?=?code;
????}

????public?String?getMessage()?{
????????return?message;
????}
????public?void?setMessage(String?message)?{
????????this.message?=?message;
????}

????public?Object?getData()?{
????????return?data;
????}

????/**
?????*?放入響應(yīng)枚舉
?????*/
????public?R?fillCode(CodeEnum?codeEnum){
????????this.setCode(codeEnum.getCode());
????????this.setMessage(codeEnum.getMessage());
????????return?this;
????}

????/**
?????*?放入響應(yīng)碼及信息
?????*/
????public?R?fillCode(int?code,?String?message){
????????this.setCode(code);
????????this.setMessage(message);
????????return?this;
????}

????/**
?????*?處理成功,放入自定義業(yè)務(wù)數(shù)據(jù)集合
?????*/
????public?R?fillData(Object?data)?{
????????this.setCode(CodeEnum.SUCCESS.getCode());
????????this.setMessage(CodeEnum.SUCCESS.getMessage());
????????this.data?=?data;
????????return?this;
????}
}

總結(jié)

本篇文章從安全性、冪等性、數(shù)據(jù)規(guī)范等方面討論了API設(shè)計(jì)規(guī)范。除此之外,一個(gè)好的API還少不了一個(gè)優(yōu)秀的接口文檔。接口文檔的可讀性非常重要,雖然很多程序員都不喜歡寫文檔,而且不喜歡別人不寫文檔。為了不增加程序員的壓力,推薦使用swagger或其他接口管理工具,通過簡單配置,就可以在開發(fā)中測試接口的連通性,上線后也可以生成離線文檔用于管理API。文章來源地址http://www.zghlxwxcb.cn/news/detail-424068.html

到了這里,關(guān)于如何設(shè)計(jì)一個(gè)牛逼的API接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JWT VS OAuth2, 如何設(shè)計(jì)一個(gè)安全的API接口?

    JWT VS OAuth2, 如何設(shè)計(jì)一個(gè)安全的API接口?

    Client Profile客戶端描述 OAuth2框架也指定了集中客戶端描述,用來表示應(yīng)用程序的類型: Web應(yīng)用 用戶代理 原聲應(yīng)用 Authorization Grants認(rèn)證授權(quán) 認(rèn)證授權(quán)代表資源擁有者授權(quán)給客戶端應(yīng)用程序的一組權(quán)限,可以是下邊幾種形式: 授權(quán)碼 隱式授權(quán) 資源擁有者密碼證書 客戶端證書

    2024年04月11日
    瀏覽(19)
  • vscode 配置 copilot(最牛逼的AI智能提示)

    https://link.zhihu.com/?target=https%3A//github.com/features/copilot/signup 因?yàn)橥卣钩绦蚰J(rèn)下載的是最新的 會(huì)不匹配 提示報(bào)錯(cuò)你 更新最新版的拓展 或者手動(dòng)下載別的版本拓展 具體原因是因?yàn)?github 沒有被墻 但是亞洲區(qū)域 cdn 被墻了 需要自己手動(dòng)指定最新的 host ip 地址 查詢動(dòng)態(tài) IP 地址

    2024年02月02日
    瀏覽(46)
  • StableStudio,比Midjourney還牛逼的繪畫平臺(tái),免費(fèi)!

    StableStudio,比Midjourney還牛逼的繪畫平臺(tái),免費(fèi)!

    大家好,我是鳥哥。 之前給大家推薦過Midjourney和Bluewillow兩個(gè)AI繪畫平臺(tái):簡直了!比Midjourney更刺激,還免費(fèi)!Midjourney功能超級(jí)強(qiáng)大,但比較傲嬌,很貴,是否讓用戶免費(fèi)體驗(yàn)要看心情;Bluewillow免費(fèi),但質(zhì)量稍微差了一點(diǎn)。 今天呢,再給大家推薦一個(gè)AI繪圖平臺(tái)——StableS

    2024年02月09日
    瀏覽(22)
  • 這五款牛逼的 IDEA 插件,堪稱代碼質(zhì)量檢查利器!

    這五款牛逼的 IDEA 插件,堪稱代碼質(zhì)量檢查利器!

    隨著業(yè)務(wù)的發(fā)展,系統(tǒng)會(huì)越來越龐大,原本簡單穩(wěn)定的功能,可能在不斷迭代后復(fù)雜度上升,潛在的風(fēng)險(xiǎn)也隨之暴露,導(dǎo)致最終服務(wù)不穩(wěn)定,造成業(yè)務(wù)價(jià)值的損失。而為了減少這種情況,其中一種比較好的方式就是提高代碼質(zhì)量,比如通過代碼審查,從而降低錯(cuò)誤風(fēng)險(xiǎn),但是

    2024年04月16日
    瀏覽(21)
  • 這是我見過最牛逼的滑動(dòng)加載前端框架

    這是我見過最牛逼的滑動(dòng)加載前端框架

    在手機(jī)端實(shí)現(xiàn)下拉刷新和下拉加載是最常見不過的需求了。今天大師兄就給大家分享一個(gè)非常精致的js框架:mescroll. 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 mescroll.js 是在 H5端 運(yùn)行的下拉刷新和上拉加載插件。1.4.1以上版本,還能配置圖片懶加載效果。 mescroll.j

    2024年01月21日
    瀏覽(30)
  • PHP 如何設(shè)計(jì)一個(gè)高安全的電商平臺(tái):淘寶/京東商品類API封裝接口

    PHP 如何設(shè)計(jì)一個(gè)高安全的電商平臺(tái):淘寶/京東商品類API封裝接口

    如何保證API接口安全 接口的安全性主要圍繞Token、Timestamp和Sign三個(gè)機(jī)制展開設(shè)計(jì),保證接口的數(shù)據(jù)不會(huì)被篡改和重復(fù)調(diào)用,下面具體來看: Token授權(quán)機(jī)制 :用戶使用用戶名密碼登錄后服務(wù)器給客戶端返回一個(gè)Token(通常是UUID),并將Token-UserId以鍵值對(duì)的形式存放在緩存服務(wù)

    2024年02月09日
    瀏覽(26)
  • 牛逼的python庫-使用FuzzyWuzzy庫進(jìn)行模糊字符串匹配

    FuzzyWuzzy是一個(gè)Python庫,用于模糊字符串匹配和字符串相似度計(jì)算。它基于Levenshtein距離算法,用于比較兩個(gè)字符串之間的差異。 下面是FuzzyWuzzy庫的一些常見用法: 導(dǎo)入庫和模塊: 使用 fuzz.ratio 計(jì)算兩個(gè)字符串之間的相似度: 這會(huì)計(jì)算出兩個(gè)字符串之間的相似度百分比。 使

    2024年02月12日
    瀏覽(24)
  • 膜拜!用最少的代碼卻實(shí)現(xiàn)了最牛逼的滾動(dòng)動(dòng)畫!

    膜拜!用最少的代碼卻實(shí)現(xiàn)了最牛逼的滾動(dòng)動(dòng)畫!

    大家好,我是 程序視點(diǎn) 的小二哥!今天小二哥帶領(lǐng)大家學(xué)習(xí)如何使用最少的代碼創(chuàng)建令人嘆為觀止的滾動(dòng)動(dòng)畫~ 在聊 ScrollTrigger 插件之前我們先簡單了解下 GSAP 。 GreenSock 動(dòng)畫平臺(tái) (GSAP) 可為 JavaScript 可以操作的任何內(nèi)容(CSS 屬性、SVG、React、畫布、通用對(duì)象等)動(dòng)畫化,并

    2024年02月14日
    瀏覽(27)
  • 教你成為比卡卡西還牛逼的全能忍者,全拷貝與分割函數(shù)

    教你成為比卡卡西還牛逼的全能忍者,全拷貝與分割函數(shù)

    ?如何成為一個(gè)集雷切,寫輪眼偵查和拷貝與一身的卡卡西,下面教你! 目錄 ?第一式——雷切!? strtok 第二式——寫輪眼偵查! strerror函數(shù) 第三式——寫輪眼拷貝! memcpy ?模擬實(shí)現(xiàn)memcpy函數(shù) ? ??博客昵稱:陳大大陳 ??座右銘:所謂覺悟,就是在漆黑的荒野上開辟出一條

    2024年01月19日
    瀏覽(17)
  • 這個(gè)牛逼的Python模塊,能讓你輕松模擬并記錄鍵盤操作(附零基礎(chǔ)學(xué)習(xí)資料)

    這個(gè)牛逼的Python模塊,能讓你輕松模擬并記錄鍵盤操作(附零基礎(chǔ)學(xué)習(xí)資料)

    模擬鍵盤操作執(zhí)行自動(dòng)化任務(wù),我們常用的有 pyautowin 等自動(dòng)化操作模塊。但是這些模塊有一個(gè)很大的缺點(diǎn),編譯的時(shí)候非常依賴 windows 的C語言底層模塊。 (文末送福利) 今天介紹的這個(gè)模塊叫做 keyboard 它有一個(gè)最大的優(yōu)點(diǎn):純Python原生開發(fā),編譯時(shí)完全不需要依賴C語言模

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包