- API安全技術與實戰
- 錢君生 楊明 韋巍編著
- 2681字
- 2021-07-08 11:51:07
1.2 API的發展歷史
從API的定義中可以看出,API的產生主要是為了解決互聯網技術發展過程中不同組件之間通信所遇到問題,在不同的階段出現不同的API形態,它的發展伴隨著互聯網技術的發展,尤其是Web技術的發展,在不停地變化著。追溯API的發展歷史前,先來了解一下Web技術的發展歷史。
1.2.1 Web技術發展的4個階段
互聯網的發展,業界通常劃分為Web 1.0~Web 6.0。這里,主要依據其技術形式的不同,將互聯網的發展劃分為4個階段,如圖1-5所示。

●圖1-5 Web技術發展的4個階段
■ Web 1.0:群雄逐鹿、先入為王的時代,技術形式以HTML靜態網頁為主。
■ Web 2.0:用戶交互逐漸豐富,大量互聯網應用產生,技術形式以動態網頁為主。
■ Web 3.0:出現行業垂直細分,業務形態從PC互聯網端向WAP端、移動端、專用終端遷移,此階段催生了大量的交互技術,其中API技術得到了快速發展。
■ Web 4.0:逐漸出現行業巨頭通吃的局面,大數據、物聯網開啟萬物互聯的時代,平臺型企業的崛起,云計算、容器化、微服務等技術開創了API技術的新天地。
從Web技術發展的43個階段可以看出,API技術的快速發展是在Web 3.0時代開始的,那么從Web 3.0時代到今天,API技術到底發生了哪些改變?
API技術早期通常用于操作系統的庫,其所在運行環境為系統本地,此階段它的表現形式對應于上文提及的類庫或操作系統型API。僅在操作系統本地環境中使用制約了API技術在很長一段時間內的發展,直到動態網頁技術的廣泛使用才開始出現轉機。
作為IT技術人員,大多數人應該了解動態網頁技術的基本原理,動態網頁技術與靜態網頁技術最大的區別在于頁面內容的動態性和可交互性。開發者使用CGI、ASP、PHP、JSP等技術完成服務器端的實現,在瀏覽器界面,根據用戶的要求和選擇而發生動態改變和響應,這其中離不開網頁端與數據庫的通信交互,遠程應用型API也就是在這樣的背景下產生的。這個階段的API、應用場景除了JDBC驅動的數據庫調用外,還產生了大型應用程序不同協議間的通信。比如Flex+Java應用之間的前后端通信,Spring開發框架提供的遠程調用模式RMI、HttpInvoker、JAX RPC等,還有一些標準協議型的技術如EJB、WTC(Weblogic Tuxedo Connector)、SOAP等。這些技術,在后來的發展中只有少數得以延續,大多數被新的API技術所取代,逐漸淹埋在歷史的角落。
在這個階段API技術廣泛應用,除了類庫型、操作系統型、遠程應用型繼續在使用外,Web應用型API典型的技術應用場景有以下幾種。
1.EJB應用
EJB是Enterprise Java Beans的縮寫,又稱企業Java Beans,是JavaEE中面向服務的體系架構所提供的解決方案。通過EJB技術,開發者將業務功能封裝在服務器端,以服務的形式對外發布,客戶端在無須知道技術實現細節的情況下來完成遠程方法的調用,如圖13-6所示。

●圖1-6 EJB應用
2.RMI應用
RMI是Remote Method Invocation的縮寫,俗稱遠程方法調用。這里主要是指于Java語言應用中通過代碼實現網絡遠程調用另一個JVM的某個方法,其底層實現依賴于序列化和反序列化,容易出現嚴重的安全漏洞。其API調用形式如圖1-7所示。

●圖1-7 RMI應用
3.SOAP應用
SOAP是Simple Object Access Protocol的首字母縮寫,即簡單對象訪問協議。在使用SOAP協議的應用類型中,主要是Web Service服務,其通過Web服務描述語言(Web Services Description Language,WSDL)文件描述,以服務接口的形式對外提供軟件能力,如圖1-8所示。

●圖1-8 SOAP應用
2000年以后,整個社會的數字化環境發生了巨大的變革,面對瞬息萬變的市場環境,業務團隊和IT團隊為了滿足快速變化的業務需求不得不互相協作,以保證企業的競爭力,EJB、WTC這類笨重的技術逐漸被拋棄,與微服務、容器化技術架構兼容性好且輕量級的RESTful API技術開始占據上風,并逐步成為主流。關于這一點,可以通過近十年的百度趨勢指數側面驗證,如圖1-9所示。

●圖1-9 百度趨勢指數
在API技術的發展歷史中,業界習慣把前兩個階段的API稱為古典API,后兩個階段的API稱為現代API,現代API是當前API技術的主要使用形式,它們使用不同的通信協議或消息格式構成了精彩的API技術世界。
1.2.2 現代API的類型劃分
從上節的介紹內容可以看出,現代API以Web應用型API為主,基于現代API的服務對象不同、技術形式不同、使用者不同,可以對現代API做不同類型的劃分。
1.基于服務對象的類型劃分
每一個API所提供的服務能力,最終都是被企業內外部調用才能實現API的價值。根據API所承載業務功能的服務范圍不同,現代API可以劃分為公有型API、私有型API和混合型API。
■ 公有型API:此類API主要面向企業外部客戶或企業第三方合作伙伴,向外部提供企業的API服務能力,以業務承載為主。
■ 私有型API:此類API主要面向企業內部,不面向外部提供服務能力,具有一定的私密性,以運營管理、內部服務支撐為主。
■ 混合型API:此類API的服務對象沒有明顯的限制,兼有企業外部客戶和企業內部應用之間的調用。
對現代API按照服務對象進行不同類型的劃分,有利于明確服務對象和使用范圍,為API自身安全性保障要求提供不同級別的防護目標。
2.基于技術形式的類型劃分
每一個API都有著不同的技術實現,使用不同的開發語言,或使用不同的協議標準,基于這些技術形式和技術的普及程度,將現代API劃分為RESTful API、GraphQL API、SOAP API、gRPC API、類XML-RPC及其他類型API。
■ RESTful API:此類API在技術形式上,以REST風格為主,是當前業界主流的API技術形式。
■ GraphQL API:此類API采用Facebook提出的GraphQL查詢語言來構建API服務,尤其適用于樹狀、圖狀結構數據的使用場景。
■ SOAP API:即使用SOAP協議作為API接口交互方式的API應用,以Web Service為代表。
■ gRPC API:此類API采用Google的gRPC框架,通過Protobuf協議來定義接口和條件約束,完成客戶端和服務器端的遠程調用。
■ 類XML-RPC及其他類型API:此類API包含多種技術,因使用的普及率低故將其歸類在一起,通常包含XML-RPC的API、JMS(Java Message Service)接口、WebSocket API以及IoT通信協議的接口等。
基于技術形式的API類型劃分帶有鮮明的技術特點,它有助于使用者了解其技術構成和該技術的交互細節,了解該技術形式所帶來的特有的安全特性和安全風險,做出準確的判斷和合理的處置。
3.基于使用者的類型劃分
不同的API提供不同的業務功能供不同的用戶使用,這些使用者可能是具體的自然人用戶,也可能是前端應用程序,還有可能是終端設備,基于API使用者的不同,現代API可以劃分為用戶參與型API、程序調用型API和IoT設備型API。
■ 用戶參與型API:此類API在業務交互過程中,需要自然人用戶參與,比如用戶單擊操作、與用戶身份相關的會話保持、與用戶身份相關的訪問控制等。大多數互聯網應用中使用的API為此種類型。
■ 程序調用型API:API調用中,存在某些場景下無自然人用戶參與的情況,僅僅是后端服務或前端應用程序之間的通信處理。這些場景下的API屬于此類型的API。
■ IoT設備型API:除了上述兩類API之外,還有一些API僅僅提供給IoT設備調用,在交互流程上比上述兩類要簡單,或設備內無法完成流程,需要離線操作。
基于API的使用者對現代API做類型劃分,有助于API設計者和研發人員梳理交互流程,識別不同場景下適用的安全機制,制定不同的安全控制策略來提高API服務的安全性。