1. API是什么?
API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數或者接口,目的是提供應用程序與開發人員基于某軟件或硬件得以訪問一組例程的能力,而又無須訪問源碼,或理解內部工作機制的細節。——百度百科
2. 怎么實現一個 API 服務器
要實現一個 API 服務器,首先要考慮兩個方面:API 風格和媒體類型。Go 語言中常用的 API 風格是 RPC 和 REST,常用的媒體類型是 JSON、XML 和 Protobuf。在 Go API 開發中常用的組合是 gRPC+Protobuf 和REST+JSON。
3. REST是什么
REST(REpresentational State Transfer),首次出現在 2000 年 Roy Thomas Fielding 的博士論文中,它指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful 的。
- 資源(Resources),REST 是“表現層狀態轉化”,其實它省略了主語。“表現層”其實指的是“資源”的“表現層”。那么什么是資源呢?我們平時網上訪問到圖片、文字、文檔、多媒體等就是資源,一般通過 URI 來定位。也就是說,一個 URI 就表示一個資源。
- 表現層(Representation),資源是作為一個具體的實體信息,它可以有多種的展現方式。而把實體展現出來就是表現層。例如一個 txt 文本信息,它可以輸出成 html、json 等。
- 狀態轉化(State Transfer),訪問一個網站,就代表了客戶端和服務器的一個互動過程。在這個過程中,就涉及到數據和狀態的變化。而 HTTP 協議是無狀態的,那么這些狀態肯定保存在服務器端,所以如果客戶端想要通知服務器端改變數據和狀態的變化,就要通過某種方式來通知它。客戶端能通知服務器端的手段,只能是 HTTP 協議。具體來說,就是 HTTP 協議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET 用來獲取資源,POST 用來新建資源(也可以用于更新資源),PUT 用來更新資源,DELETE 用來刪除資源。
綜上所述,我們總結一下什么是 RESTful 架構:
-
每一個 URI 代表一種資源
-
客戶端和服務端之間,傳遞這種資源的某種表現層
-
客戶端通過四個 HTTP 動詞,對服務端資源進行操作,實現“表現層狀態轉化”
4. RPC又是什么
RPC(Remote Procedure Call Protocol)遠程過程調用協議,是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。它假定某些傳輸協議的存在,如 TCP 或 UDP,以便為通信程序之間攜帶信息數據。通過它可以使函數調用模式網絡化。在 OSI 網絡通信模型中,RPC 跨越了傳輸層和應用層。RPC 使得開發包括網絡分布式多程序在內的應用程序更加容易。
5. REST 還是 RPC
RPC 優點:
-
調用簡單,清晰,透明,不用像 rest 一樣復雜,就像調用本地方法一樣簡單
-
高效低延遲,性能高
-
自定義協議(讓傳輸報文提及更小)
-
性能消耗低,高效的序列化協議可以支持高效的二進制傳輸
-
自帶負載均衡
RPC 缺點:
- 耦合性強
- 無法跨語言,平臺敏感
REST優點:
-
耦合性低,兼容性好,提高開發效率
-
不用關心接口實現細節,相對更規范,更標準,更通用,跨語言支持
REST缺點:
- 性能不如 RPC 高