?譯者 | 陳峻
審校 | 孫淑娟
API是應(yīng)用程序編程接口(Application Programming Interface)的縮寫(xiě),能夠起到兩個(gè)軟件組件之間的連接器或中介的作用。此類(lèi)接口往往通過(guò)一組明確的協(xié)議,來(lái)表示各種原始的請(qǐng)求和響應(yīng)。API文檔可以向開(kāi)發(fā)人員展示請(qǐng)求和響應(yīng)是如何形成的。簡(jiǎn)單而言,API能夠允許兩個(gè)應(yīng)用程序彼此之間實(shí)現(xiàn)通信。無(wú)論我們?cè)谑謾C(jī)上查看天氣,還是使用微信,或者在Facebook等應(yīng)用上收發(fā)消息,都會(huì)頻繁地使用到API。
有關(guān)API的數(shù)據(jù)
- 自2007年以來(lái),API的使用量已增加了13倍
- 得益于API,Google、Facebook和Twitter等知名應(yīng)用,每天都會(huì)被調(diào)用約50-100億次
- Netflix持續(xù)使用API向200臺(tái)設(shè)備傳輸數(shù)據(jù)流
API的調(diào)用流程
當(dāng)我們?cè)谑褂脩?yīng)用程序的某項(xiàng)功能時(shí),通常會(huì)在后臺(tái)發(fā)生如下情況:
- 數(shù)據(jù)請(qǐng)求被發(fā)送到服務(wù)器上
- 服務(wù)器對(duì)其進(jìn)行解析,并理解其請(qǐng)求的含義
- 服務(wù)器提供必要的響應(yīng)
- 響應(yīng)被成功地發(fā)送回設(shè)備
其實(shí),每次在我們要求應(yīng)用程序提供某些特定的服務(wù)響應(yīng)時(shí),這樣的過(guò)程都會(huì)重復(fù)循環(huán)一次。
不同的API協(xié)議和架構(gòu)
- REST:在眾多的API架構(gòu)類(lèi)型中,表述性狀態(tài)轉(zhuǎn)移(Representational State Transfer)往往被廣為采用。REST API的工作原理是以客戶(hù)機(jī)與服務(wù)器的方式,將API的前端與后端區(qū)分開(kāi)來(lái)。而且它不會(huì)存儲(chǔ)任何數(shù)據(jù)或狀態(tài)。
- SOAP:簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議(Simple Object Access Protocol)也被廣泛用于通過(guò)XML創(chuàng)建Web API的場(chǎng)景中。它能夠兼容諸如:HTTP、TCP和SMTP等互聯(lián)網(wǎng)常見(jiàn)的通信協(xié)議。由于SOAP易于被擴(kuò)展,因此開(kāi)發(fā)者能夠很容易地用它來(lái)編寫(xiě)和添加新的功能。與其他架構(gòu)相比,SOAP具有高度結(jié)構(gòu)化、嚴(yán)格可控性、以及具有被明確定義的標(biāo)準(zhǔn)等特性。
- RPC:遠(yuǎn)程過(guò)程調(diào)用(remote procedural call)能夠被用來(lái)調(diào)用各種可執(zhí)行的操作。它非常適合于發(fā)送各種參數(shù),以及接收各種相應(yīng)的響應(yīng)。
API的類(lèi)型
根據(jù)訪(fǎng)問(wèn)級(jí)別和使用范圍的不同,API往往可以被分為如下不同的類(lèi)型。開(kāi)發(fā)人員可以根據(jù)自己的要求,進(jìn)行適當(dāng)?shù)剡x擇。
A、伙伴API
在此類(lèi)API中,對(duì)于數(shù)據(jù)的訪(fǎng)問(wèn),僅限于那些擁有官方許可證的授權(quán)客戶(hù)端。也就是說(shuō),只有那些與提供API的公司有業(yè)務(wù)關(guān)系的調(diào)用方,才能使用此類(lèi)API。開(kāi)發(fā)方對(duì)于誰(shuí)可以訪(fǎng)問(wèn)這些資源,有著較大的控制權(quán)。
伙伴API的優(yōu)勢(shì):
- 業(yè)務(wù)方可以把更多的注意力放在公司的核心與發(fā)展上,而無(wú)需遷就開(kāi)發(fā)人員。如果一個(gè)開(kāi)發(fā)人員覺(jué)得某個(gè)問(wèn)題難以被解決,則可以由另一個(gè)開(kāi)發(fā)人員去輕松地搞定。這便是伙伴合作給項(xiàng)目帶來(lái)的好處。
- 保留伙伴API政策將有助于集成大量電商軟件的不同解決方案,并使得軟件能夠在瞬息萬(wàn)變的行業(yè)中保持最新和強(qiáng)相關(guān)。
B、公共API
顧名思義,公共API可供任何外部開(kāi)發(fā)人員或企業(yè)使用。對(duì)于那些與公眾和其他業(yè)務(wù)組織共享應(yīng)用和數(shù)據(jù)的業(yè)務(wù)結(jié)構(gòu)來(lái)說(shuō),Public API是理想的選擇。
公共API的優(yōu)勢(shì):
公共API不但容易實(shí)現(xiàn),而且能夠保證用戶(hù)只要有互聯(lián)網(wǎng)連接,就能隨時(shí)隨地使用應(yīng)用服務(wù)。
C、內(nèi)部API
內(nèi)部或私有API往往只能讓企業(yè)在其業(yè)務(wù)內(nèi)部連接和訪(fǎng)問(wèn)數(shù)據(jù)。由于內(nèi)部API的安全性和身份驗(yàn)證能力相對(duì)較弱,因此容易導(dǎo)致數(shù)據(jù)受到安全威脅。對(duì)此,開(kāi)發(fā)者需要逐漸改變它們?cè)诎踩系母鞣N部署與安排。
內(nèi)部API的優(yōu)勢(shì):
由于內(nèi)部API能夠?qū)I(yè)務(wù)的不同部分連接起來(lái),以提高開(kāi)發(fā)過(guò)程中的適應(yīng)性和靈活性,因此此類(lèi)API可以讓開(kāi)發(fā)人員在較短的時(shí)間內(nèi),制定和構(gòu)建新的關(guān)聯(lián)應(yīng)用。
D、復(fù)合API
復(fù)合API通常是兩到多種API的混合體。由于集成了各類(lèi)API的長(zhǎng)處,因此它往往能夠帶來(lái)更高的速度、更大的靈活性、以及更好的性能。
復(fù)合API的優(yōu)勢(shì):
復(fù)合API能夠在單個(gè)調(diào)出(callout)中執(zhí)行多項(xiàng)操作。而且其所需的數(shù)據(jù)位于調(diào)用序列的末端,而無(wú)需解析各種響應(yīng)。因此,它比其他API更受歡迎。
API的工作原理
每個(gè)API都是由函數(shù)的調(diào)用來(lái)實(shí)現(xiàn)的。而函數(shù)調(diào)用的任務(wù)主要是請(qǐng)求軟件去執(zhí)行某些特定的操作和函數(shù)。當(dāng)用戶(hù)啟動(dòng)API的調(diào)用時(shí),它會(huì)通知應(yīng)用程序去啟用API與Web服務(wù)器通信,并執(zhí)行相應(yīng)的任務(wù)。具體而言,每當(dāng)用戶(hù)指示軟件去執(zhí)行某些任務(wù)、或請(qǐng)求某種信息時(shí),API會(huì)以應(yīng)用程序和Web服務(wù)器之間的“橋梁”身份去實(shí)現(xiàn)。正如前文所說(shuō),我們?cè)谌粘I钪惺褂玫降?,諸如:Facebook登錄、PayPal支付、以及Google天氣查詢(xún)等,都是API的典型示例。您可以通過(guò)鏈接-- https://nordicapis.com/5-examples-of-apis-we-use-in-our-everyday-lives/,了解其更多的應(yīng)用場(chǎng)景。
API開(kāi)發(fā)的工具
既然API的任務(wù)是簡(jiǎn)化和加速軟件的開(kāi)發(fā),那么正所謂“工欲善其事,必先利其器”,讓我們來(lái)看看三種常見(jiàn)的API開(kāi)發(fā)工具:
- Sandbox:作為一種簡(jiǎn)單的模擬RESTful API,它主要能夠降低測(cè)試過(guò)程中第三方API調(diào)用的成本。
- Apigee:作為構(gòu)建應(yīng)用連接的理想工具,由Google推出的Apigee可以促進(jìn)應(yīng)用程序和服務(wù)之間的數(shù)據(jù)傳輸。
- APIMatic:對(duì)于網(wǎng)站的各種API而言,APIMatic以平臺(tái)的形式,方便開(kāi)發(fā)人員更加靈活地維護(hù)API的各種更新。同時(shí),它也允許開(kāi)發(fā)人員將API描述并轉(zhuǎn)換成諸如:WADL、Swagger、RAML、OAI格式、IO文檔、API藍(lán)圖、har1.4、以及Postman集合等多種形式。
API的構(gòu)建實(shí)踐
API的構(gòu)建實(shí)踐,主要體現(xiàn)在如下五個(gè)方面:
- 安全性:使用基于令牌的身份驗(yàn)證,是構(gòu)建安全可靠的API的良好實(shí)踐。它既保證了安全性,又兼顧了用戶(hù)友好性。
- 文件:精心編撰的API文檔不但能夠降低項(xiàng)目的開(kāi)發(fā)成本,而且可以提高應(yīng)用的運(yùn)行效率和實(shí)現(xiàn)時(shí)間。應(yīng)用程序開(kāi)發(fā)人員往往需要通過(guò)豐富的API支持文檔,來(lái)詳細(xì)地了解整個(gè)調(diào)用與實(shí)現(xiàn)過(guò)程。
- 節(jié)流:當(dāng)涉及到需要重定向流量的溢出、防止DoS(拒絕服務(wù))、以及備份各種API時(shí),我們往往需要通過(guò)應(yīng)用的節(jié)流,來(lái)有效地實(shí)現(xiàn)此類(lèi)目的。
- SDK和代碼庫(kù):通過(guò)向開(kāi)發(fā)團(tuán)隊(duì)提供必要的庫(kù)資源,我們可以加速開(kāi)發(fā)的進(jìn)程。
- 重寫(xiě)HTTP方法:由于一些代理只能支持POST和GET方法,因此我們使用定制的HTTP報(bào)頭X-HTTP-Method-Override,能夠允許RESTful API去重寫(xiě)HTTP的方法。
小結(jié)
從Node.js到PHP與ASP.Net的Web開(kāi)發(fā),無(wú)論是簡(jiǎn)單的Python開(kāi)發(fā)、還是復(fù)雜的Java軟件,API在每一項(xiàng)技術(shù)中都得到了廣泛的使用,都能夠?yàn)閺拈_(kāi)發(fā)到業(yè)務(wù)的協(xié)作鋪平道路。只要我們能夠根據(jù)自己的實(shí)際業(yè)務(wù)需求,合理地構(gòu)建或修改API,就能夠填補(bǔ)異構(gòu)數(shù)字技術(shù)之間的鴻溝,提高應(yīng)用服務(wù)的調(diào)用效率,進(jìn)而為業(yè)務(wù)帶來(lái)更豐厚的利潤(rùn)。
譯者介紹
陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專(zhuān)注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn)。
原文標(biāo)題:??Everything You Should Know About APIs???,作者:Himanshu Mehra?