{
"name": "windeal",
"age": 25,
"email": "xxxx@163.com"
}

更新資源(PUT)

更新一個資源。例如,將 ID 為 1 的用戶信息更新為:

PUT /users/1
{
"name": "Jane",
"age": 30,
"email": "jane@example.com"
}

刪除資源(DELETE)

刪除一個資源。例如,刪除 ID 為 1 的用戶:

  1. DELETE /users/1

RESTful API的優缺點

三、GraphQL API

GraphQL API 簡介

GraphQL API官網: https://graphql.org/

GraphQL API的基本概念是使用GraphQL語言來描述API的查詢能力。客戶端通過GraphQL語言來描述所需的數據,而無需知道底層的數據結構和存儲方式。然后,服務器會根據客戶端的請求生成響應,并將數據發送回客戶端。

GraphQL API遵循以下設計原則:

  1. 強類型:GraphQL是一種強類型的查詢語言,它的類型系統有嚴格的約束、具備清晰的層次關系。
  2. 單一端點:所有的GraphQL API都從同一個端點獲取相應的數據。
  3. 可組合性:客戶端可以通過組合不同的查詢來獲取所需的數據。
  4. 可預測性:GraphQL查詢語句在語法上是非常明確的,因此對于客戶端來說是可以預測的。
  5. 客戶端驅動:GraphQL API由客戶端發起,客戶端控制數據傳輸和終端的兼容性。
  6. 自我描述的API:GraphQL API使用類型系統來描述其功能和數據類型,因而具有自我描述特性。

GraphQL API 示例

示例一:查詢博客文章列表

query {
posts {
id
title
author {
id
name
}
}
}

在這個示例中,我們查詢了博客文章列表,每篇文章都有一個 ID、標題和作者。作者包括 ID 和名字。這個查詢對于一個顯示所有博客文章的列表的應用程序非常有用。

示例二: 創建新的博客文章

mutation {
createPost(input: {
title: "My new blog post"
content: "This is the content of my new blog post."
authorId: "123"
}) {
id
title
content
author {
id
name
}
}
}

在這個示例中,我們創建了一個新的博客文章。我們提供了文章的標題、內容和作者 ID。查詢返回了新創建的文章的 ID、標題、內容和作者。這個查詢對于創建新的博客文章的應用程序非常有用。

GraphQL API 的優缺點

  1. 高度定制化:GraphQL API允許客戶端請求特定的數據,從而減少了不必要的數據傳輸,提高了性能。這使得客戶端能夠根據其需求選擇所需的數據,從而提高了效率。
  2. 單一的入口點:GraphQL API通過一個單一的入口點提供所有數據,這使得客戶端更容易理解和使用API。這有助于簡化客戶端的開發和維護工作。
  3. 更好的可擴展性:GraphQL API的可擴展性更強,因為它允許開發人員輕松地添加新的字段和類型,而無需更改現有的API。這使得API更容易適應不斷變化的需求。
  1. 學習曲線:雖然GraphQL API具有許多優點,但它也有一個學習曲線。開發人員需要花費一些時間學習如何使用GraphQL API,以及如何有效地使用它。
  2. 實現復雜性:雖然GraphQL API提供了很多優勢,但實現它可能會增加開發人員的工作量。例如,開發人員需要編寫自定義解析器和驗證器,以確保API的正確性和安全性。
  3. 缺乏標準化:雖然REST API已經成為Web開發的事實標準,但GraphQL API仍然是一個相對較新的技術。這意味著它可能沒有那么多現有的工具和資源可供開發人員使用。

四、RPC API

RPC API 簡介

RPC API官網  https://grpc.io/

RPC(Remote Procedure Call)API 是一種遠程調用協議,它允許客戶端在不了解服務端實現細節的情況下,調用服務端上的函數或方法。RPC API 的主要特點是它可以跨越網絡,實現不同計算機之間的通信和數據交換。

gRPC 是一個高性能、開源的 RPC 框架,它可以在多種環境中運行,包括云端、數據中心和本地計算機。gRPC 使用 HTTP/2 協議進行通信,并利用 Protocol Buffers 作為接口定義語言和消息交換格式,以實現高效的數據傳輸和低延遲。

gRPC 的特點包括:

  1. 高性能:gRPC 使用 HTTP/2 協議和 Protocol Buffers 序列化技術,能夠實現高效的數據傳輸和低延遲。
  2. 跨平臺:gRPC 支持多種編程語言和平臺,包括 C++、Java、Python、Go、C#、Node.js 等。
  3. 可擴展性:gRPC 支持在多種環境中運行,包括云端、數據中心和本地計算機。
  4. 安全性:gRPC 支持 SSL/TLS 加密,能夠保護數據傳輸的安全性。
  5. 易用性:gRPC 提供了簡單易用的 API,使得開發者可以輕松地實現遠程調用功能。

RPC API示例

一個用戶信息查詢的示例:

定義接口:

syntax = "proto3";

service UserService {
rpc GetUserInfo (UserRequest) returns (UserResponse);
}

message UserRequest {
int32 user_id = 1;
}

message UserResponse {
string username = 1;
int32 age = 2;
bool gender = 3;
}

基于這個proto文件,可以生成客戶端和服務端的樁代碼。

在服務端,需要定義轉代碼中的handler接口。

在客戶端,可以通過樁代碼像調用本地函數一樣調用接口。

RPC API 的優缺點

  1. 易于使用:RPC API通常提供了簡單的接口,使得開發人員可以輕松地調用遠程服務,而無需關心底層通信和數據序列化的細節。
  2. 跨平臺兼容性:RPC API允許不同平臺和編程語言之間的通信,實現了代碼的復用和模塊化。
  3. 高性能:RPC API通常采用了高效的數據傳輸和通信機制,能夠提供較高的處理速度和響應時間。
  1. 通信延遲:由于RPC API通常依賴于網絡通信,因此可能會受到網絡延遲和不穩定的影響,從而導致較高的響應時間和可用性風險。
  2. 安全性問題:RPC API需要在網絡上傳輸敏感數據,因此可能會受到網絡攻擊和數據泄露的風險。
  3. 調試困難:當RPC API調用出現問題時,調試可能會變得非常困難,因為錯誤信息可能分布在多個組件和服務中。

五、SOAP API

SOAP API 簡介

SOAP(Simple Object Access Protocol,簡單對象訪問協議)是一種基于 XML 的通信協議,它定義了用于 Web 上的應用程序之間通信的標準格式。 SOAP API 是基于 SOAP 協議的一種 API 設計方式,用于實現應用程序之間的數據交互和通信。

在 SOAP API 中,通信雙方都需要遵循一定的協議格式,以實現數據的傳遞和解析。SOAP API 由以下幾個關鍵概念組成:

  1. SOAP 消息:SOAP 消息是指基于 XML 的數據格式,用來在調用者和服務端之間傳遞信息。SOAP 消息包含 SOAP 頭(header)和 SOAP 體(body)兩個部分。
  2. SOAP 頭(Header):SOAP 頭是可選的,它用于傳遞一些用于處理消息的上下文信息,例如身份驗證信息、編碼信息、事務處理信息等。
  3. SOAP 體(Body):SOAP 體是必需的,它包含了具體的方法調用和參數信息。
  4. SOAP 動作(Action):SOAP 動作定義了在 SOAP 消息中所包含方法的名稱。
  5. SOAP 協議綁定(Protocol Binding):SOAP 協議綁定定義了 SOAP 消息如何映射到底層傳輸協議(如 HTTP、SMTP、TCP、UDP等)。SOAP 協議綁定使得 SOAP 協議可以適配不同的傳輸協議。

SOAP API 的特點包括:

  1. 基于 XML:SOAP API 的數據格式基于 XML,使得數據交互具備更好的可讀性和可維護性。
  2. 統一標準:SOAP API 定義了一套統一的標準,使得應用程序之間的通信更具有規范性和可互操作性。
  3. 支持多種傳輸協議: SOAP 協議綁定允許 SOAP API 適配大多數的底層傳輸協議,以滿足不同應用層之間的交互需求。
  4. 廣泛應用:SOAP API 作為一種通用的 API 設計規范,廣泛應用于多個領域,例如企業集成、Web 服務、移動應用等。

SOAP API 示例

以下是一個基于 Amazon 的 Product Advertising API,使用 SOAP API 調用獲取某個關鍵詞的商品信息的示例。

SOAP 請求消息示例:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="http://soap.amazon.com">
<soapenv:Header/>
<soapenv:Body>
<api:ItemSearch>
<api:AssociateTag>Your_Associate_Tag</api:AssociateTag>
<api:Author>Stephen King</api:Author>
<api:Keywords>Carrie</api:Keywords>
<api:SearchIndex>Books</api:SearchIndex>
<api:ResponseGroup>Medium</api:ResponseGroup>
<api:Availability>Available</api:Availability>
<api:Sort>Title</api:Sort>
<api:Power><api:BrowseNode>17</api:BrowseNode>
</api:ItemSearch>
</soapenv:Body>
</soapenv:Envelope>

SOAP 相應消息示例

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="http://soap.amazon.com">
<soapenv:Header/>
<soapenv:Body>
<api:ItemSearchResponse>
<api:Items>
<api:Request>
<api:ValidRequest>true</api:ValidRequest>
</api:Request>
<api:Item>
<api:ASIN>B0000ZD9PC</api:ASIN>
<api:DetailPageURL>http://www.amazon.com/Carrie-Stephen-King/dp/B0000ZD9PC</api:DetailPageURL>
<api:ItemAttributes>
<api:Title>Carrie: A Novel</api:Title>
<api:Author>Stephen King</api:Author>
<api:ListPrice>
<api:Amount>699</api:Amount>
<api:CurrencyCode>USD</api:CurrencyCode>
</api:ListPrice>
</api:ItemAttributes>
</api:Item>
</api:Items>
</api:ItemSearchResponse>
</soapenv:Body>
</soapenv:Envelope>

在上面的示例中,我們使用 ItemSearch 方法,向 Amazon 發送一個查詢關鍵詞“Carrie”的 SOAP 請求,并包含關鍵詞、搜索目錄、響應類型、排序等參數。服務器返回查找結果,并在 SOAP 響應消息中返回 Amazon 的商品信息。開發者可以按照 SOAP 響應消息中的結構,解析并處理 Amazon 的商品信息。

SOAP API 優缺點

  1. 安全性高:SOAP API 提供了諸如 WS-Security、HTTPS 等安全機制,提供了可靠、安全的通信。可在 SOAP 消息中包含簽名和加密,確保數據安全。
  2. 可擴展性高:SOAP API 是基于 XML 標準設計的,SOAP 消息可以通過 XML Schema 定義數據類型和結構,并支持復雜的數據結構和嵌套對象。
  3. 支持異構平臺:由于SOAP API使用通用的 XML 語言,所以支持跨不同的平臺、應用程序和編程語言之間的數據傳輸和通信。
  1. 繁瑣的數據格式: SOAP API 能夠處理XML的復雜性和強大的擴展性使其變得非常繁瑣。
  2. 性能比 RESTful API 低:SOAP API 要求數據格式必須為 XML,相較于 JSON 格式的 RESTful API,數據量會比較大,且該格式要求的數據解析和序列化會更加耗時。
  3. 需要更復雜協議:SOAP 協議需要使用許多的協議層,如 HTTP、XML、SOAP、WSDL 等,以確保協議可靠,也需要更多的開發時間和經驗。所以在 API 技術選擇時不建議考慮 SOAP API,因為使用 SOAP 的開銷非常大,特別是在資源有限的系統上。

六、對比分析

下表列出了四種主流的API風格在使用場景、數據格式和接口性能等方面的比較:

API風格使用場景數據格式接口性能
SOAP API企業級應用、大規模數據請求與查詢、跨平臺應用XML
RESTful API互聯網Web應用、處理實時數據、與前端結合JSON/XML
GraphQL需要控制返回的數據字段、精細定制查詢自定義查詢語言
gRPC對內應用程序、處理大量數據傳輸請求protobufs

本文章轉載微信公眾號@Tech Lead 進階

上一篇:

掌握 API 生命周期:基本階段和行之有效的成功策略

下一篇:

實用 Web API 規范
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費