偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

六個(gè)調(diào)用第三方接口遇到的大坑

網(wǎng)絡(luò)
今天呢,給大家?guī)?lái)了六個(gè)關(guān)于第三方接口調(diào)用相關(guān)的坑。問(wèn)題點(diǎn)不難,但是面試中突然問(wèn)到可能回答起來(lái)會(huì)有點(diǎn)懵,雖然都知道,但是不一定能回答好。

今天的行情相信大家都感受到了,而面試也是越來(lái)越卷了,從技術(shù)八股卷到業(yè)務(wù)場(chǎng)景。今天呢,給大家?guī)?lái)了6個(gè)關(guān)于第三方接口調(diào)用相關(guān)的坑。問(wèn)題點(diǎn)不難,但是面試中突然問(wèn)到可能回答起來(lái)會(huì)有點(diǎn)懵,雖然都知道,但是不一定能回答好。

接下來(lái)呢,我會(huì)帶領(lǐng)大家整體的過(guò)一遍,大家刷到了就留個(gè)印象,后邊的筆記呢,我也準(zhǔn)備好了,評(píng)論區(qū)扣1然后私信我領(lǐng)取哈。大家也可以來(lái)吐槽吐槽自己遇到的一些坑,讓更多的小伙伴看到,一起交流。

閑話少說(shuō),接下來(lái)我們就進(jìn)入正題。

域名訪問(wèn)不到

首先第一個(gè)問(wèn)題,域名訪問(wèn)不通,一般我們?cè)诘谝淮螌?duì)接第三方平臺(tái)的API接口時(shí),可能會(huì)先通過(guò)瀏覽器或者postman調(diào)用一下。

對(duì)于這個(gè)點(diǎn)分兩個(gè)方面看,要么是我有問(wèn)題,要么是對(duì)方有問(wèn)題。

  • 自己的網(wǎng)絡(luò)問(wèn)題
  • 對(duì)方域名訪問(wèn)不通
  • 對(duì)方DNS解析有問(wèn)題
  • 對(duì)方服務(wù)未部署等等
  • 對(duì)方設(shè)置了訪問(wèn)白名單

有可能你調(diào)用第三方平臺(tái)的API接口時(shí),他們的接口真的掛了,他們還不知道。還有一種最重要的情況,就是你的工作網(wǎng)絡(luò),是否可以訪問(wèn)這個(gè)外網(wǎng)的接口。

有些公司為了安全考慮,對(duì)內(nèi)網(wǎng)的開(kāi)發(fā)環(huán)境,是設(shè)置了防火墻的,或者有一些其他的限制,有些ip白名單,只能訪問(wèn)一些指定的外網(wǎng)接口。

如果你發(fā)現(xiàn)你訪問(wèn)的域名,在開(kāi)發(fā)環(huán)境訪問(wèn)不通,就要到運(yùn)維同學(xué)給你添加ip白名單了。

接口突然沒(méi)返回?cái)?shù)據(jù)

如果你調(diào)用第三方平臺(tái)的某個(gè)API接口查詢數(shù)據(jù),剛開(kāi)始一直都有數(shù)據(jù)返回。但突然某一天沒(méi)返回?cái)?shù)據(jù)了。但是該API接口能夠正常響應(yīng)。不要感到意外,有可能是第三方平臺(tái)將數(shù)據(jù)刪除了。

我對(duì)接完第三方平臺(tái)的API接口后,部署到了測(cè)試環(huán)境,發(fā)現(xiàn)他們接口竟然沒(méi)有返回?cái)?shù)據(jù),原因是他們有一天將測(cè)試環(huán)境的數(shù)據(jù)刪完了。因此,在部署測(cè)試環(huán)境之前,要先跟對(duì)方溝通,要用哪些數(shù)據(jù)測(cè)試,不能刪除。

還有一點(diǎn),在我們自己程序中,我們永遠(yuǎn)不要相信三方平臺(tái)的數(shù)據(jù),如果出錯(cuò)了,我們要寫(xiě)容錯(cuò)策略。不能因?yàn)槿降腻e(cuò)誤,把自己系統(tǒng)給拖死。

token失效

有些平臺(tái)的API接口在請(qǐng)求之前,先要調(diào)用另外一個(gè)API接口獲取token,然后再header中攜帶該token信息才能訪問(wèn)其他的業(yè)務(wù)API接口。其實(shí)大多數(shù)我們自己的系統(tǒng)也是這么設(shè)計(jì)的。

在獲取token的API接口中,我們需要傳入賬號(hào)、密碼和密鑰等信息。每個(gè)接口對(duì)接方,這些信息都不一樣。

我們?cè)谡?qǐng)求其他的API接口之前,每次都實(shí)時(shí)調(diào)用一次獲取token的接口獲取token?還是請(qǐng)求一次token,將其緩存到redis中,后面直接從redis獲取數(shù)據(jù)呢?

很顯然我們更傾向于后者,因?yàn)槿绻看握?qǐng)求其他的API接口之前,都實(shí)時(shí)調(diào)用一次獲取token的接口獲取token,這樣每次都會(huì)請(qǐng)求兩次接口,性能上會(huì)有一些影響。

如果將請(qǐng)求的token,保存到redis,又會(huì)出現(xiàn)另外一個(gè)問(wèn)題:token失效的問(wèn)題。

我們調(diào)用第三方平臺(tái)獲取token的接口獲取到的token,一般都有個(gè)有效期,比如:1天,1個(gè)月等。

在有效期內(nèi),該API接口能夠正常訪問(wèn)。如果超過(guò)了token的有效期,則該API接口不允許訪問(wèn)。

好辦,我們把redis的失效時(shí)間設(shè)置成跟token的有效期一樣不就OK了?

想法是不錯(cuò),但是有問(wèn)題。

你咋保證,你們系統(tǒng)的服務(wù)器時(shí)間,跟第三方平臺(tái)的服務(wù)器時(shí)間一模一樣?

我之前遇到過(guò)某大廠,提供了獲取token接口,在30天內(nèi)發(fā)起請(qǐng)求,每次都返回相同的token值。如果超過(guò)了30天,則返回一個(gè)新的。

有可能出現(xiàn)這種情況,你們系統(tǒng)的服務(wù)器時(shí)間要快一些,第三方平臺(tái)的時(shí)間要慢一些。結(jié)果到了30天,你們系統(tǒng)調(diào)用第三方平臺(tái)的獲取token接口獲取到了token還是老的token,更新到redis中了。

過(guò)一段時(shí)間,token失效了,你們系統(tǒng)還是用老的token訪問(wèn)第三方平臺(tái)的其他API接口,一直都返回失敗。但獲取新的token卻要等30天,這個(gè)時(shí)間太漫長(zhǎng)了。

對(duì)于具體的錯(cuò)誤碼要設(shè)計(jì)重試機(jī)制:

為了解決這個(gè)問(wèn)題,需要捕獲token失效的異常。如果在調(diào)用其他的API接口是發(fā)現(xiàn)token失效了,馬上請(qǐng)求一次獲取token接口,將新的token立刻更新到redis中。

這樣基本可以解決token失效問(wèn)題,也能盡可能保證訪問(wèn)其他接口的穩(wěn)定性和性能。

接口超時(shí)

系統(tǒng)上線之后,調(diào)用第三方API接口,最容易出現(xiàn)的問(wèn)題,應(yīng)該是接口超時(shí)問(wèn)題了。系統(tǒng)到外部系統(tǒng)之間,有一條很復(fù)雜的鏈路,中間有很多環(huán)節(jié)出現(xiàn)問(wèn)題,都可能影響API接口的相應(yīng)時(shí)間。

這點(diǎn)很尷尬,別人的系統(tǒng),咱們控制不了,你說(shuō)讓別人優(yōu)化系統(tǒng),人家立項(xiàng)調(diào)整上線估計(jì)就半個(gè)月,這還是情況好的,拖個(gè)半年的都有。別人體驗(yàn)的是你的系統(tǒng),速度慢一點(diǎn)還能說(shuō)得過(guò)去,要是老是超時(shí)失敗反饋到用戶層面。用戶第一個(gè)找的就是你。。。。

作為API接口的調(diào)用方,面對(duì)第三方API接口超時(shí)問(wèn)題,除了給他們反饋問(wèn)題,優(yōu)化接口性能之外。

我們更有效的方式,可能是增加接口調(diào)用的失敗重試機(jī)制。

例如:

  • 如果接口調(diào)用失敗,則程序會(huì)立刻自動(dòng)重試3次。
  • 如果重試之后成功了,則該API接口調(diào)用成功。
  • 如果重試3次之后還是失敗,則該API接口調(diào)用失敗。

偷偷改參數(shù)了

我之前調(diào)用過(guò)某平臺(tái)的API接口獲取指標(biāo)的狀態(tài),之前根據(jù)雙方約定的狀態(tài)有:正常和禁用 兩種。

然后將狀態(tài)更新到我們的指標(biāo)表中。后來(lái),雙方系統(tǒng)上線運(yùn)行了好幾個(gè)月。突然有一天,用戶反饋說(shuō)某一條數(shù)據(jù)明明刪除了,為什么在頁(yè)面上還是可以查到。此時(shí),我查我們這邊的指標(biāo)表,發(fā)現(xiàn)狀態(tài)是正常的。

然后查看調(diào)用該平臺(tái)的API接口日志,發(fā)現(xiàn)返回的該指標(biāo)的狀態(tài)是:下架。

什么鬼,心里已經(jīng)問(wèn)候了八百遍了。。。

跟該平臺(tái)的開(kāi)發(fā)人員溝通后,發(fā)現(xiàn)他們改了狀態(tài)的枚舉,增加了:上架、下架等多個(gè)值,而且沒(méi)有通知我們。這就坑了。我們這邊的代碼中判斷,如果狀態(tài)非禁用狀態(tài),都認(rèn)為是正常狀態(tài)。

而下架狀態(tài),自動(dòng)被判斷為正常狀態(tài)。經(jīng)過(guò)跟對(duì)方溝通后,他們確認(rèn)下架狀態(tài),是非正常狀態(tài),不應(yīng)該顯示指標(biāo)。他們改了數(shù)據(jù),臨時(shí)解決了該指標(biāo)的問(wèn)題。后來(lái),他們按接口文檔又改回了之前的狀態(tài)枚舉值。

這里還有一種其他的方案,把枚舉信息也通過(guò)一個(gè)接口返回,然后做展示,這樣就能避免前面提到的問(wèn)題了。

接口時(shí)好時(shí)壞

不知道你在調(diào)用第三方接口時(shí),有沒(méi)有遇到過(guò)接口時(shí)好時(shí)壞的情況。5分鐘前,該接口還能正常返回?cái)?shù)據(jù)。

5分鐘后,該接口返回503不可用。又過(guò)了幾分鐘,該接口又能正常返回?cái)?shù)據(jù)了。

可能情況:

  • 這種情況大概率是第三方平臺(tái)在重啟服務(wù),在重啟的過(guò)程中,可能會(huì)出現(xiàn)服務(wù)暫時(shí)不可用的情況。
  • 第三方接口部署了多個(gè)服務(wù)節(jié)點(diǎn),有一部分服務(wù)節(jié)點(diǎn)掛了。也會(huì)導(dǎo)致請(qǐng)求第三方接口時(shí),返回值時(shí)好時(shí)壞的情況。
  • 網(wǎng)關(guān)的配置沒(méi)有及時(shí)更新,沒(méi)有把已經(jīng)下線的服務(wù)剔除掉。這樣用戶請(qǐng)求經(jīng)過(guò)網(wǎng)關(guān)時(shí),網(wǎng)關(guān)轉(zhuǎn)發(fā)到了已經(jīng)下線的服務(wù),導(dǎo)致服務(wù)不可用。網(wǎng)關(guān)轉(zhuǎn)發(fā)請(qǐng)求到正常的服務(wù),該服務(wù)能夠正常返回。

如果遇到該問(wèn)題,要盡快將問(wèn)題反饋給第三方平臺(tái),然后增加接口失敗重試機(jī)制。

責(zé)任編輯:趙寧寧 來(lái)源: 技術(shù)老男孩
相關(guān)推薦

2023-04-16 19:34:01

2024-02-20 14:48:40

2015-11-05 16:44:37

第三方登陸android源碼

2017-11-01 06:40:33

2017-12-11 15:53:56

2019-07-30 11:35:54

AndroidRetrofit庫(kù)

2014-07-23 08:55:42

iOSFMDB

2013-01-15 13:50:22

iOS開(kāi)發(fā)開(kāi)源庫(kù)

2017-05-16 13:24:02

LinuxCentOS第三方倉(cāng)庫(kù)

2014-07-25 09:33:22

2019-09-03 18:31:19

第三方支付電商支付行業(yè)

2016-10-21 14:09:10

2009-12-31 14:38:34

Silverlight

2016-12-28 17:47:56

API

2023-06-20 11:34:48

2011-10-08 14:37:59

漏洞

2019-09-02 14:59:41

蘋(píng)果維修設(shè)備

2013-08-12 16:04:19

第三方移動(dòng)應(yīng)用

2021-09-26 10:43:08

注冊(cè)Istio集成

2024-04-03 12:57:29

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)