如介紹中所述,gRPC 服務(wù)是內(nèi)部或所謂的“東西向”?服務(wù)到服務(wù)通信的熱門選擇。雖然 gRPC 表現(xiàn)出卓越的性能特征,但目前大量 API 使用 HTTP 作為其主要通信協(xié)議。將這些 API 遷移到 gRPC 需要大量資源投入,尤其是考慮到并非所有開發(fā)人員都熟悉 gRPC 框架。

為了克服這一挑戰(zhàn),我們希望提供一個(gè)適配器層,為服務(wù)提供更傳統(tǒng)的基于 JSON HTTP 的 API。我們決定使用開源gRPC 網(wǎng)關(guān)項(xiàng)目自動(dòng)為我們的用例生成適配器,而不是自己手動(dòng)編寫協(xié)議轉(zhuǎn)換。網(wǎng)關(guān)基于指定服務(wù)和消息的.proto 文件。它是服務(wù)生產(chǎn)者和消費(fèi)者之間的唯一真實(shí)來(lái)源(或契約)。為了簡(jiǎn)化網(wǎng)關(guān)的生成,我們創(chuàng)建了一個(gè)便利包裝器,允許我們通過(guò)向其提供對(duì) .proto 文件的引用來(lái)生成網(wǎng)關(guān)。./generate-gateway.sh –proto-path ./examples/currency.proto

上述命令解析提供的 .proto 文件并生成 go 模塊,用于將傳入的 HTTP REST 請(qǐng)求轉(zhuǎn)換為 gRPC 并將其發(fā)送到指定的端點(diǎn)。最后,它將網(wǎng)關(guān)包裝在可以獨(dú)立部署的 go 模塊中。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_generate_grpc_gateway.max-700x700.png

對(duì)于最終的架構(gòu),我們需要構(gòu)建一個(gè)容器映像并部署到目標(biāo)運(yùn)行時(shí)(例如Cloud Run)。要了解網(wǎng)關(guān)的工作原理,我們還可以在本地運(yùn)行它:(cd generated/gateway && docker build . -t gateway:latest)docker run -p 8080:8080 -e GRPC_SERVER_ENDPOINT=localhost:9090 gateway:latest

此處的環(huán)境變量GRPC_SERVER_ENDPOINT 指向網(wǎng)關(guān)應(yīng)向其發(fā)送流量的 gRPC 端點(diǎn)。在本例中,我們已經(jīng)在端口 9090 上本地運(yùn)行了 gRPC貨幣服務(wù)。網(wǎng)關(guān)啟動(dòng)后,您現(xiàn)在可以向網(wǎng)關(guān)的端點(diǎn)發(fā)送常規(guī) JSON HTTP 請(qǐng)求:curl -X POST localhost:8080/hipstershop.CurrencyService/Convert -d ‘{“from”: {“units”: 3, “currency_code”: “USD”, “nanos”: 0}, “to_code”: “CHF”}’

如我們所見,我們已將 gRPC 貨幣服務(wù)作為 JSON HTTP API 提供,以便在更廣泛的 API 生態(tài)系統(tǒng)中更輕松地使用。但是,當(dāng)我們考慮這個(gè)新 API 如何與公司完善的 API 策略保持一致時(shí),仍有改進(jìn)空間:

通過(guò) API 管理降低進(jìn)入門檻

為了實(shí)現(xiàn)其中一些功能并最終推動(dòng) API 的采用,我們可以利用 Apigee API 代理外觀形式的 API 管理層。雖然 Apigee 可以在直通模式下本機(jī)公開 gRPC 服務(wù),但在這里我們?cè)谥稗D(zhuǎn)換的協(xié)議上進(jìn)行操作,該協(xié)議允許我們應(yīng)用一系列有用的策略和配置:

為了在我們的 gRPC 網(wǎng)關(guān)之上進(jìn)行構(gòu)建,我們首先需要 API 代理來(lái)安全地訪問(wèn)我們的 gRPC 網(wǎng)關(guān),該網(wǎng)關(guān)可以部署到 Cloud Run,在那里可以使用 Cloud IAM 強(qiáng)制執(zhí)行身份驗(yàn)證。使用此安全機(jī)制,我們的 API 代理必須配置為使用 Google Cloud 身份驗(yàn)證本身,或轉(zhuǎn)發(fā)從 API 客戶端收到的憑據(jù)。

Apigee使用 API 代理管理路由的靈活而全面的方法使我們能夠向 API 使用者公開 RESTful 路徑,并在運(yùn)行時(shí)將路徑重寫為我們的 gRPC 網(wǎng)關(guān)所期望的路徑。curl -X POST “https://$APIGEE_HOSTNAME/currency/v1/convert” -d ‘{“from”: {“units”: 3, “currency_code”: “USD”, “nanos”: 0}, “to_code”: “CHF”}’

通過(guò) Apigee API 代理代理我們的貨幣服務(wù)可以自動(dòng)收集 API指標(biāo)和分析數(shù)據(jù),從而為我們提供有關(guān) API 運(yùn)行狀況和成功的豐富見解。我們還可以通過(guò)附加額外的流量管理、安全、中介甚至代碼擴(kuò)展策略來(lái)構(gòu)建我們的 API 代理。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_grpc_services_as_apis.max-1500x1500.jpg

為了向新受眾介紹和推廣此 API,我們可以利用Apigee 的開發(fā)者門戶發(fā)布API 產(chǎn)品,供開發(fā)者發(fā)現(xiàn)、探索和試驗(yàn) API,從而開辟新的機(jī)會(huì)。在此基礎(chǔ)上,我們可以選擇通過(guò)各種不同的策略(例如基于使用量的定價(jià)或訂閱計(jì)劃)將 API 產(chǎn)品貨幣化,以解鎖更多收入來(lái)源。

結(jié)論和后續(xù)步驟

總之,我們展示了如何將 gRPC 服務(wù)作為 HTTP API 輕松展示給新受眾,同時(shí)還能利用 Apigee 等綜合 API 管理平臺(tái)的優(yōu)勢(shì)。通過(guò)將 gRPC 的性能與 REST API 的熟悉度和工具相結(jié)合,我們可以為我們的服務(wù)和數(shù)據(jù)解鎖新的可能性,從而覆蓋更廣泛的開發(fā)人員和應(yīng)用程序。通過(guò)采用這種混合方法,我們可以在構(gòu)建 API 生態(tài)系統(tǒng)時(shí)彌合 gRPC 和 REST 之間的差距,這樣您就可以充分利用兩全其美的優(yōu)勢(shì)。

文章來(lái)源:From gRPC to RESTful APIs: Expose your gRPC services to the REST of the world

上一篇:

implements 關(guān)鍵字的意義和應(yīng)用

下一篇:

使用 Cloud Code 插件進(jìn)行 API 管理,加快 API 開發(fā)速度
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)