自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

域名訪問不到

首先第一個(gè)問題,域名訪問不通,一般我們在第一次對接第三方平臺的API接口時(shí),可能會先通過瀏覽器或者postman調(diào)用一下。

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

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

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

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

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

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

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

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

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

token失效

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

接口超時(shí)

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

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

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

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

例如:

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

偷偷改參數(shù)了

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

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

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

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

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

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

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

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

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

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

可能情況:

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

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

責(zé)任編輯:趙寧寧 來源: 技術(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

2014-07-23 08:55:42

iOSFMDB

2019-07-30 11:35:54

AndroidRetrofit

2013-01-15 13:50:22

iOS開發(fā)開源庫

2017-05-16 13:24:02

LinuxCentOS第三方倉庫

2019-09-03 18:31:19

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

2016-12-28 17:47:56

API

2014-07-25 09:33:22

2009-12-31 14:38:34

Silverlight

2016-10-21 14:09:10

2023-06-20 11:34:48

2025-03-04 10:00:00

架構(gòu)接口k開發(fā)

2009-01-14 12:45:05

MSNIM蘋果

2014-07-22 10:56:45

Android Stu第三方類庫

2021-09-26 10:43:08

注冊Istio集成

2013-08-12 16:04:19

第三方移動(dòng)應(yīng)用
點(diǎn)贊
收藏

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