对于接口的一些认知
軟件接口的定義
??在我們?nèi)粘9ぷ髦?#xff0c;提到“接口”這兩個(gè)字時(shí),一般有兩種眾所周知的含義:其一是指軟件本身的狹義“接口”,比如各種軟件開發(fā)API等。其二則指的是人與軟件之間的交互界面,稱作“用戶界面”,也就是“UI”。??本文中主要闡述的是第一種接口,也就是軟件接口,也稱為應(yīng)用程序接口(API,Application Programming Interface),它的定義是:在規(guī)則(通訊協(xié)議)下使用某種工具(交互方式)達(dá)到軟件間的數(shù)據(jù)信息傳遞。軟件接口一般由請(qǐng)求協(xié)議、請(qǐng)求服務(wù)器地址、請(qǐng)求服務(wù)器地址的端口、接口地址、接口參數(shù)等幾部分構(gòu)成。根據(jù)軟件接口的技術(shù)實(shí)現(xiàn)方式,可以將API分為以下幾種類型:RESTful接口、GraphQL接口、SOAP接口、gRPC接口、消息隊(duì)列接口、FTP接口等等。
接口的技術(shù)實(shí)現(xiàn)詳解
RESTful接口
??RESTful是一種架構(gòu)的規(guī)范與約束、原則,符合這種規(guī)范的架構(gòu)就是RESTful架構(gòu),RESTful 架構(gòu)的核心規(guī)范與約束:統(tǒng)一接口。??一次RESTful接口請(qǐng)求的消息格式樣例如下:
??在樣例中,包含以下RESTful接口相關(guān)協(xié)議信息。
??資源URL格式為 schema://host[:port]/version/path ,其中schema是指定使用的應(yīng)用層協(xié)議,比如HTTP、HTTPS、FTP等;host是API服務(wù)器的IP地址或域名;port是指API服務(wù)器的端口;version是指API請(qǐng)求的版本;path是指API請(qǐng)求的資源路徑。
??資源請(qǐng)求分配的HTTP請(qǐng)求方法,除了樣例中的GET方法外,常用的請(qǐng)求方法還有用于服務(wù)器新增數(shù)據(jù)或資源的POST方法,用于獲取資源請(qǐng)求的元數(shù)據(jù)HEAD方法,用于更新服務(wù)器資源的PUT方法,用于刪除服務(wù)器資源的DELETE方法以及查詢與資源相關(guān)選項(xiàng)的OPTIONS方法等。不同HTTP請(qǐng)求方法的調(diào)用樣例如下:
GET /v1/api----獲取資源對(duì)象的集合 GET /v1/api/resource----獲取單個(gè)資源對(duì)象 POST /v1/api/resource----創(chuàng)建新的資源對(duì)象 PUT /v1/api/resource----更新資源對(duì)象 DELETE /v1/api/resource----刪除資源對(duì)象 ??在實(shí)際應(yīng)用中,對(duì)于API請(qǐng)求路徑的命名通常遵循一定的規(guī)范或規(guī)律,比如將功能相近的API端點(diǎn)放在一起(如下所示),通過這些接口規(guī)范性的特征,讀者很容易識(shí)別出RESTful接口類的接口。 https://api.example.com/v1/model/action1 https://api.example.com/v1/model/action2 https://api.example.com/v1/model/action3
GraphQL接口
??GraphQL是Facebook推出的一種基于用戶自定義數(shù)據(jù)類型的API查詢語言和現(xiàn)代應(yīng)用程序?qū)釉品?wù)的全面解決方案,我們可以理解為GraphQL是基于API之上的一層封裝,目的是為了更好,更靈活的適用于業(yè)務(wù)的需求變化,在很多場(chǎng)景下,可以作為REST、SOAP或gRPC的替代方案。??下圖是一個(gè)GraphQL應(yīng)用的基本架構(gòu),其中前端只和GraphQL服務(wù)層進(jìn)行API交互,而GraphQL層再往后接入各種數(shù)據(jù)源。
??一個(gè)典型的GraphQL服務(wù)是通過定義類型、類型上的字段、字段的解析函數(shù)來對(duì)外部提供能力服務(wù)的。這里,以用戶admin的查詢?yōu)闃永?#xff0c;描述其交互過程。當(dāng)請(qǐng)求GraphQL服務(wù)時(shí),其查詢結(jié)構(gòu)為: GET /graphql?query= {userByName(name:"admin"){idnameaddress{firstAddresssecondAddress}} } ??這不是JSON格式的數(shù)據(jù),但它們很相似,此GraphQL查詢的表達(dá)含義如下:
- 通過用戶名admin來查詢用戶信息;
- 僅查詢id、name、address三個(gè)字段的信息;
- 對(duì)于通信地址address,需要查詢首選地址和備用地址。
??與上述請(qǐng)求參數(shù)對(duì)應(yīng)的服務(wù)器響應(yīng)為:
{"userByName":{"id":"123","name":"admin","address":{"firstaddress":"杭州","secondaddress":"寧波"}} }SOAP接口
??SOAP API相對(duì)于其它的API技術(shù)來說,已進(jìn)入了衰退期,但在企業(yè)級(jí)應(yīng)用中,因歷史遺留問題仍在普遍使用著。通俗的講,SOAP接口是基于HTTP協(xié)議的XML通信技術(shù),主要應(yīng)用于Webservice接口通信。在技術(shù)實(shí)現(xiàn)上,一個(gè)完整的SOAP API由三部分組成:SOAP(簡(jiǎn)單對(duì)象訪問協(xié)議)、UDDI(Web Services提供信息注冊(cè)中心的實(shí)現(xiàn)標(biāo)準(zhǔn)范圍)、WSDL(描述Web Services以及如何對(duì)它們進(jìn)行訪問),它們之間的相互關(guān)系如下圖所示:??WSDL為服務(wù)消費(fèi)者提供了Web Services接口的詳細(xì)描述,通過解析WSDL獲取調(diào)用參數(shù)的詳細(xì)描述后,使用XML格式的數(shù)據(jù)與服務(wù)提供者進(jìn)行數(shù)據(jù)交互。
??一個(gè)典型的SOAP消息,其基本格式如下所示: <?xml version="0.1"?> <soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> <!--soap消息頭部--> </soap:Header> <soap:Body> <!--soap消息體--> <soap:Fault> <!--soap消息錯(cuò)誤提示--> </soap:Fault> </soap:Body> </soap:Envelope> ??其中Envelope和Body為必選節(jié)點(diǎn),Envelope用于標(biāo)識(shí)此消息為SOAP消息,Body包含所有調(diào)用和響應(yīng)的必須信息。
gRPC接口
??gRPC由Google開發(fā),是一款語言中立、平臺(tái)中立、開源的 RPC 框架,通過Server/Client模式,使得通信中的各個(gè)應(yīng)用之間像調(diào)用本地接口一樣調(diào)用遠(yuǎn)程API。??gRPC是可以在任何環(huán)境下運(yùn)行的現(xiàn)代開源高性能RPC框架,它可以通過可插拔方式,有效支撐數(shù)據(jù)中心內(nèi)和跨數(shù)據(jù)中心的服務(wù)鏈接,以實(shí)現(xiàn)負(fù)載平衡、跟蹤、運(yùn)行狀況檢查和身份驗(yàn)證。它同樣也適用于分布式計(jì)算的“最后一公里”,以將設(shè)備、移動(dòng)應(yīng)用程序和瀏覽器連接到后端服務(wù)。
??在gRPC API中,客戶端應(yīng)用程序通過遠(yuǎn)程方法調(diào)用在其它服務(wù)器的應(yīng)用程序,多個(gè)RPC系統(tǒng)之間,圍繞API服務(wù)的思想,通過協(xié)議約定接口參數(shù)和返回類型,完成不同服務(wù)能力的組合。不同的客戶端和服務(wù)器端之間,無須考慮編程語言的不同,均參照協(xié)議約定遠(yuǎn)程調(diào)用接口,它們之間的通信關(guān)系如下圖所示: ??在客戶端與服務(wù)器端之間,將數(shù)據(jù)(比如JSON格式數(shù)據(jù))序列轉(zhuǎn)化為二進(jìn)制編碼,然后使用Protobuf協(xié)議進(jìn)行通信。gRPC API通常適用于對(duì)接口安全性或性能要求較高的場(chǎng)景,比如某個(gè)具備管理功能屬性的接口,想通過嚴(yán)格的gRPC API約束其調(diào)用者的范圍,則Protobuf協(xié)議恰好滿足此需求。
??Protobuf協(xié)議的消息結(jié)構(gòu)是通過Protocol Buffer Language語言進(jìn)行定義和描述的,其數(shù)據(jù)結(jié)構(gòu)描述文件的拓展名是.proto,其示例結(jié)構(gòu)如下: message Book{string name = "gRPC接口";int32 page =200;bool is_sale = 1; } ??在使用時(shí),需要先將.proto的文件編譯,再序列化,才能在通信中使用。通俗的講,就是客戶端和服務(wù)器端通信時(shí),先將JSON或XML格式的數(shù)據(jù)使用Protobuf技術(shù)轉(zhuǎn)換為二進(jìn)制流的數(shù)據(jù)格式,再進(jìn)行傳輸。
消息隊(duì)列接口
??消息隊(duì)列(MQ,Message queue)主要用來暫存生產(chǎn)者生產(chǎn)的消息,供后續(xù)其他消費(fèi)者來消費(fèi)。常見的MQ類型有:JMS(Java Message Service,Java消息服務(wù),目前市場(chǎng)上有很多開源的JMS消息中間件,比如 ActiveMQ、OpenJMS、Kafka、Rabbit MQ)、AMQP(Advanced Message Queueing Protocol,高級(jí)消息隊(duì)列協(xié)議)、MQTT(Message Queueing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸,該協(xié)議主要為嵌入式設(shè)備提供消息通信)。消息隊(duì)列的通信過程如下:??消息隊(duì)列是分布式系統(tǒng)中重要的中間件,在高性能、高可用、低耦合等系統(tǒng)架構(gòu)中扮演著重要作用。分布式系統(tǒng)可以借助消息隊(duì)列的能力,輕松實(shí)現(xiàn)以下功能:
- 解耦,將一個(gè)流程的上游和下游拆開,上游專注生產(chǎn)消息,下游專注處理消息。
- 廣播,一個(gè)上游生產(chǎn)的消息輕松被多個(gè)下游服務(wù)處理。
- 緩沖,應(yīng)對(duì)流量突然上漲,消息隊(duì)列可以扮演一個(gè)緩沖器的作用,保護(hù)下游服務(wù)使其可以根據(jù)實(shí)際的消費(fèi)能力處理消息。
- 異步,上游發(fā)送消息后可以馬上返回,下游可以異步處理消息。
- 冗余,保留歷史消息,處理失敗或當(dāng)出現(xiàn)異常時(shí)可以進(jìn)行重試或者回溯防止丟失。
FTP接口
??FTP接口指的是基于FTP協(xié)議,系統(tǒng)實(shí)現(xiàn)文件在網(wǎng)絡(luò)間的共享和傳輸。對(duì)于大數(shù)據(jù)量的交互,采用這種文件的交互方式最適合不過了。系統(tǒng)A和系統(tǒng)B約定文件服務(wù)器地址,文件命名規(guī)則,文件內(nèi)容格式等內(nèi)容,通過上傳文件到文件服務(wù)器進(jìn)行數(shù)據(jù)交互。FTP接口交互過程如下圖所示:其它相關(guān)知識(shí)
接口響應(yīng)方式
??接口響應(yīng)方式分為同步和異步兩種:- 同步響應(yīng):指發(fā)送一個(gè)請(qǐng)求,需要等待返回,然后才能夠發(fā)送下一個(gè)請(qǐng)求,有個(gè)等待過程;
- 異步響應(yīng):指發(fā)送一個(gè)請(qǐng)求,不需要等待返回,隨時(shí)可以再發(fā)送下一個(gè)請(qǐng)求,即不需要等待。
接口命名
- 接收XXXX:表示源系統(tǒng)主動(dòng)推送數(shù)據(jù)信息給所屬系統(tǒng);
- 請(qǐng)求/獲取XXXX:表示所屬系統(tǒng)主動(dòng)抓取源系統(tǒng)數(shù)據(jù)信息;
- 發(fā)送/下發(fā)/廣播/上傳XXXXX:表示所屬系統(tǒng)作為源系統(tǒng)主動(dòng)推送數(shù)據(jù)信息給外部系統(tǒng);
- 反饋XXXX:表示所屬系統(tǒng)作為源系統(tǒng)被動(dòng)推送數(shù)據(jù)信息給外部系統(tǒng)。
SAP系統(tǒng)接口——RFC
??RFC是SAP系統(tǒng)和其它(SAP或非SAP)系統(tǒng)間的一個(gè)重要而常用的雙向接口技術(shù),也被視為SAP與外部通信的基本協(xié)議。簡(jiǎn)單的說,RFC過程就是系統(tǒng)調(diào)用當(dāng)前系統(tǒng)外的程序模塊,從而實(shí)現(xiàn)某個(gè)功能,而且調(diào)用系統(tǒng)和被調(diào)用系統(tǒng)中至少有一個(gè)必須是SAP ABAP系統(tǒng)。這種遠(yuǎn)程功能調(diào)用也可在同一系統(tǒng)內(nèi)部進(jìn)行(如本地SAP系統(tǒng)內(nèi)的遠(yuǎn)程調(diào)用);但通常情況下,調(diào)用程序和被調(diào)用程序處于不同系統(tǒng)。RFC和gRPC都屬于RPC(Remote Procedure Call,遠(yuǎn)程過程調(diào)用)。總結(jié)
- 上一篇: 服务器主板性能检测,服务器的主板性能指标
- 下一篇: 医疗AI实践与思考汇总