業(yè)界有很多流行的 API 網(wǎng)關(guān),開源的有 Nginx、Netflix Zuul、Kong 等。當(dāng)然 Kong 還有商業(yè)版,類似的商業(yè)版網(wǎng)關(guān)還有 GoKu API Gateway 和 Tyk 等。
GoKu API Gateway 是由國內(nèi)公司 eolinker 使用 Go 語言研發(fā),擁有社區(qū)版和商業(yè)版,包含 API Gateway 和 Dashboard 兩部分。其中社區(qū)版本包含大量基礎(chǔ)功能,可以滿足中型企業(yè)和產(chǎn)品的使用;企業(yè)版本包含更多擴(kuò)展;比較適合大型軟件和大型組織使用。
Tyk 由國外的 TykTechnologies 公司研發(fā),也是基于 Go 語言。Tyk 一切均導(dǎo)向收費(fèi)版本,免費(fèi)版本第一次申請有一年的使用授權(quán)。
下面將會介紹常用的 API 網(wǎng)關(guān)組件 Nginx、Zuul 和 Kong 的相關(guān)特性。
Nginx
Nginx 可以說是互聯(lián)網(wǎng)應(yīng)用的標(biāo)配組件,主要的使用場景包括負(fù)載均衡、反向代理、代理緩存、限流等。
Nginx 由內(nèi)核和模塊組成,內(nèi)核的設(shè)計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件與客戶端請求進(jìn)行 URL 匹配,用于啟動不同的模塊去完成相應(yīng)的工作。
Nginx 在啟動后,會有一個 Master 進(jìn)程和多個 Worker 進(jìn)程,Master 進(jìn)程和 Worker 進(jìn)程之間是通過進(jìn)程間通信進(jìn)行交互的,如圖所示。Worker 工作進(jìn)程的阻塞點是在像 select()、epoll_wait() 等這樣的 I/O 多路復(fù)用函數(shù)調(diào)用處,以等待發(fā)生數(shù)據(jù)可讀 / 寫事件。Nginx 采用了異步非阻塞的方式來處理請求,也就是說,Nginx 是可以同時處理成千上萬個請求的。
還可以將 Lua 嵌入到 Nginx 中,從而可以使用 Lua 來編寫腳本,這樣就可以使用 Lua 編寫應(yīng)用腳本,部署到 Nginx 中運(yùn)行,即 Nginx 變成了一個 Web 容器;這樣開發(fā)人員就可以使用 Lua 語言開發(fā)高性能Web應(yīng)用了。在開發(fā)的時候使用 OpenResty 來搭建開發(fā)環(huán)境,OpenResty 將 Nginx 核心、LuaJIT、許多有用的 Lua 庫和 Nginx 第三方模塊打包在一起;這樣只需要安裝 OpenResty,不需要了解 Nginx 核心和寫復(fù)雜的 C/C++ 模塊就可以,只需要使用 Lua 語言進(jìn)行 Web 應(yīng)用開發(fā)了。
使用 Nginx 的反向代理和負(fù)載均衡可實現(xiàn)負(fù)載均衡及高可用,除此之外還需要我們解決自注冊和網(wǎng)關(guān)本身的擴(kuò)展性。
Springcloud-gateway
Spring Cloud Gateway 是 Spring Cloud 微服務(wù)生態(tài)下的網(wǎng)關(guān)組件。Spring Cloud Gateway 是基于 Spring 5 和 Spring Boot 2 搭建的
Netflix Zuul
Zuul 是 Netflix 開源的微服務(wù)網(wǎng)關(guān)組件,它可以和 Eureka、Ribbon、Hystrix 等組件配合使用。社區(qū)活躍,融合于 SpringCloud 完整生態(tài),是構(gòu)建微服務(wù)體系前置網(wǎng)關(guān)服務(wù)的最佳選型。Zuul 的核心是一系列的過濾器,這些過濾器可以完成以下功能:
- 身份認(rèn)證與安全:識別每個資源的驗證要求,并拒絕那些與要求不符的請求。
- 審查與監(jiān)控:與邊緣位置追蹤有意義的數(shù)據(jù)和統(tǒng)計結(jié)果,從而帶來精確的生產(chǎn)視圖。
- 動態(tài)路由:動態(tài)地將請求路由到不同的后端集群。
- 壓力測試:逐漸增加指向集群的流量,以了解性能。
- 負(fù)載分配:為每一種負(fù)載類型分配對應(yīng)容量,并棄用超出限定值的請求。
- 靜態(tài)響應(yīng)處理:在邊緣位置直接建立部分響應(yīng),從而避免其轉(zhuǎn)發(fā)到內(nèi)部集群。
- 多區(qū)域彈性:跨越 AWS Region 進(jìn)行請求路由,旨在實現(xiàn) ELB(Elastic Load Balancing,彈性負(fù)載均衡)使用的多樣化,以及讓系統(tǒng)的邊緣更貼近系統(tǒng)的使用者。
上面提及的這些特性是 Nigix 所沒有的,Netflix 公司研發(fā) Zuul 是為了解決云端的諸多問題(特別是幫助 AWS 解決跨 Region 情況下的這些特性實現(xiàn)),而不僅僅是做一個類似于 Nigix 的反向代理,當(dāng)然,我們可以僅使用反向代理功能,這里不多做描述。
Zuul 目前有兩個大的版本:Zuul1 和 Zuul2。
- Zuul1 是基于 Servlet 框架構(gòu)建,如圖所示,采用的是阻塞和多線程方式,即一個線程處理一次連接請求,這種方式在內(nèi)部延遲嚴(yán)重、設(shè)備故障較多情況下會引起存活的連接增多和線程增加的情況發(fā)生。
- Netflix 發(fā)布的 Zuul2 有重大的更新,它運(yùn)行在異步和無阻塞框架上,每個 CPU 核一個線程,處理所有的請求和響應(yīng),請求和響應(yīng)的生命周期是通過事件和回調(diào)來處理的,這種方式減少了線程數(shù)量,因此開銷較小。
Kong
Kong 是 Mashape 開源的高性能高可用 API 網(wǎng)關(guān)和 API 服務(wù)管理層,一款基于 Nginx_Lua 模塊寫的高可用服務(wù)網(wǎng)關(guān),由于 Kong 是基于 Nginx 的,所以可以水平擴(kuò)展多個 Kong 服務(wù)器。通過前置的負(fù)載均衡配置把請求均勻地分發(fā)到各個 Server,來應(yīng)對大批量的網(wǎng)絡(luò)請求。
Nginx、Zuul 和 Kong 這三種 API 網(wǎng)關(guān)組件的功能和特性,并制作了如下的對比表格:
組件/指標(biāo) | Nginx | Zuul(1.x)/springcloud gateway | Kong 社區(qū)版 |
---|---|---|---|
API 注冊/動態(tài)路由 | 在Nginx中配置 | 動態(tài)路由 | 通過 Admin API 管理 |
支持協(xié)議 | RESTful API | RESTful API | RESTful API |
插件機(jī)制 | Lua 插件機(jī)制 | 可以基于源碼定制開發(fā),基于 Servlet/Filter | Lua 插件機(jī)制 |
安全認(rèn)證 & 鑒權(quán) | 插件支持 | 支持 OAuth、JWT 等 | 支持OAuth2.0、黑白名單、ACL、JWT、SSL 等 |
限流 | 插件 | 插件 | 支持Rate Limiting |
高可用集群 | 配合硬件負(fù)載均衡 | 可以通過部署多個 Zuul 做負(fù)載均衡 | 支持集群 |
可管理性 | 無 | 沒有 GUI 管理臺 | 提供 Rest API 交互 |
性能 | 高 | 一般 | 高 |
日志記錄 | Nginx 可靈活記日志 | 可自行配置 | 日志可以記錄到磁盤,或者HTTP、TCP、UDP發(fā)出去 |
總得來說,Zuul 復(fù)雜度較低,上手簡單,可以自定義開發(fā),但是高并發(fā)場景下的性能相對較差;Nginx 性能經(jīng)受得住考驗,配合 Lua 可以引入各種插件,但是功能性相對較弱,需要開發(fā)者自身去完善很多功能;Kong 基于 Nginx、OpenResty 和 Lua,對性能要求高,需要對外開放,建議考慮使用 Kong。下面我們將重點介紹。
Kong網(wǎng)關(guān)介紹:
- 為什么需要云原生網(wǎng)關(guān)?
- Kong 介紹
- Kong 的基本架構(gòu)
- 使用 Kong 構(gòu)建服務(wù)網(wǎng)關(guān)
- 幾種常用插件應(yīng)用
- 自定義插件的實踐
為什么需要 API 網(wǎng)關(guān)?
當(dāng)使用單體應(yīng)用程序架構(gòu)時,客戶端(Web 或移動端)通過向后端應(yīng)用程序發(fā)起一次 REST 調(diào)用來獲取數(shù)據(jù)。負(fù)載均衡器將請求路由給 N 個相同的應(yīng)用程序?qū)嵗械囊粋€。然后應(yīng)用程序會查詢各種數(shù)據(jù)庫表,并將響應(yīng)返回給客戶端。微服務(wù)架構(gòu)下,單體應(yīng)用被切割成多個微服務(wù),如果將所有的微服務(wù)直接對外暴露,勢必會出現(xiàn)安全方面的各種問題。
客戶端可以直接向每個微服務(wù)發(fā)送請求,其問題主要如下:
- 客戶端需求和每個微服務(wù)暴露的細(xì)粒度 API 不匹配。
- 部分服務(wù)使用的協(xié)議不是Web友好協(xié)議。可能使用 Thrift 二進(jìn)制 RPC,也可能使用 AMQP 消息傳遞協(xié)議。
- 微服務(wù)難以重構(gòu)。如果合并兩個服務(wù),或者將一個服務(wù)拆分成兩個或更多服務(wù),這類重構(gòu)就非常困難了。
服務(wù)端的各個服務(wù)直接暴露給客戶端調(diào)用勢必會引起各種問題。同時,服務(wù)端的各個服務(wù)可擴(kuò)展和伸縮性很差。API 網(wǎng)關(guān)是微服務(wù)架構(gòu)中的基礎(chǔ)組件,位于接入層之下和業(yè)務(wù)服務(wù)層之上,如前所述的這些功能適合在 API 網(wǎng)關(guān)實現(xiàn)。
關(guān)于服務(wù)網(wǎng)關(guān)的開源組件,有 Netflix Zuul、Spring Cloud Gateway、Kong、Traefik、NGINX 和服務(wù)網(wǎng)關(guān)類型的 Envoy 等。我們現(xiàn)在使用的是可編程的新型網(wǎng)關(guān):Spring Cloud Gateway, Spring Cloud Gateway是基于WebFlux異步編程技術(shù)。本文主要介紹現(xiàn)代微服務(wù)網(wǎng)關(guān) Kong,在 Kong 的官網(wǎng)介紹中,第一條特性便是 Kong 的云原生屬性:與平臺無關(guān),Kong 可以從裸機(jī)運(yùn)行到 Kubernetes。本文基于 Kong 1.2.1,自定義插件部分會涉及部分 Lua 編碼,適合服務(wù)端開發(fā)和運(yùn)維人員。
-
什么是 Kong
當(dāng)我們決定對應(yīng)用進(jìn)行微服務(wù)改造時,應(yīng)用客戶端如何與微服務(wù)交互的問題也隨之而來,畢竟服務(wù)數(shù)量的增加會直接導(dǎo)致部署授權(quán)、負(fù)載均衡、通信管理、分析和改變的難度增加。
面對以上問題,API GATEWAY是一個不錯的解決方案,其所提供的訪問限制、安全、流量控制、分析監(jiān)控、日志、請求轉(zhuǎn)發(fā)、合成和協(xié)議轉(zhuǎn)換功能,可以解放開發(fā)者去把精力集中在具體邏輯的代碼,而不是把時間花費(fèi)在考慮如何解決應(yīng)用和其他微服務(wù)鏈接的問題上。
-
為什么使用Kong
在眾多 API GATEWAY 框架中,Mashape 開源的高性能高可用API網(wǎng)關(guān)和API服務(wù)管理層——KONG(基于 NGINX)特點尤為突出,它可以通過插件擴(kuò)展已有功能,這些插件(使用 lua 編寫)在API請求響應(yīng)循環(huán)的生命周期中被執(zhí)行。于此同時,KONG本身提供包括 HTTP 基本認(rèn)證、密鑰認(rèn)證、CORS、TCP、UDP、文件日志、API請求限流、請求轉(zhuǎn)發(fā)及 NGINX 監(jiān)控等基本功能。目前,Kong 在 Mashape 管理了超過 15,000 個 API,為 200,000 開發(fā)者提供了每月數(shù)十億的請求支持。
Kong 的基本架構(gòu)
Kong 是基于 Nginx 的,所以可以水平擴(kuò)展多個 Kong 服務(wù)器。通過前置的負(fù)載均衡配置把請求均勻地分發(fā)到各個 Server,來應(yīng)對大批量的網(wǎng)絡(luò)請求。
Kong 主要有三個組件:
- Kong Server :基于nginx的服務(wù)器,用來接收 API 請求。
- Apache Cassandra/PostgreSQL:用來存儲操作數(shù)據(jù)。
- Kong dashboard:官方推薦 UI 管理工具,當(dāng)然,也可以使用 restfull 方式管理 admin api。
Kong 采用插件機(jī)制進(jìn)行功能定制,插件集(可以是 0 或 N 個)在 API 請求響應(yīng)循環(huán)的生命周期中被執(zhí)行。插件使用 Lua 編寫,基礎(chǔ)功能包括:HTTP 基本認(rèn)證、密鑰認(rèn)證、CORS(Cross-Origin Resource Sharing,跨域資源共享)、TCP、UDP、文件日志、API 請求限流、請求轉(zhuǎn)發(fā)以及 Nginx 監(jiān)控等。
Kong 網(wǎng)關(guān)具有以下的特性:
- 可擴(kuò)展性: 通過簡單地添加更多的服務(wù)器,可以輕松地進(jìn)行橫向擴(kuò)展,這意味著您的平臺可以在一個較低負(fù)載的情況下處理任何請求;
- 模塊化: 可以通過添加新的插件進(jìn)行擴(kuò)展,這些插件可以通過RESTful Admin API輕松配置;
- 在任何基礎(chǔ)架構(gòu)上運(yùn)行: Kong 網(wǎng)關(guān)可以在任何地方都能運(yùn)行。可以在云或內(nèi)部網(wǎng)絡(luò)環(huán)境中部署 Kong,包括單個或多個數(shù)據(jù)中心設(shè)置,以及 public,private 或 invite-only APIs。
常用概念
Kong 中常用的術(shù)語介紹,這些術(shù)語會在下面的實踐中經(jīng)常用到。
- Route:請求的轉(zhuǎn)發(fā)規(guī)則,按照 Hostname 和 PATH,將請求轉(zhuǎn)發(fā)給 Service;
- Services:多個 Upstream 的集合,是 Route 的轉(zhuǎn)發(fā)目標(biāo);
- Consumer:API 的用戶,記錄用戶信息;
- Plugin:插件,可以是全局的,也可以綁定到 Service、Router 或者 Consumer;
- Certificate:https 配置的證書;
- Sni:域名與 Certificate 的綁定,指定了一個域名對應(yīng)的 https 證書;
- Upstream:上游對象用來表示虛擬主機(jī)名,擁有多個服務(wù)(目標(biāo))時,會對請求進(jìn)行負(fù)載均衡;
- Target:最終處理請求的 Backend 服務(wù)。
使用 Kong 構(gòu)建服務(wù)網(wǎng)關(guān)
客戶端的請求將會首先經(jīng)由微服務(wù)網(wǎng)關(guān)處理,一些通用的功能切面將會在網(wǎng)關(guān)生效,即 Kong 中的插件,之后才會將請求進(jìn)行轉(zhuǎn)發(fā)到對應(yīng)的 Backend 服務(wù),如下圖所示。
安裝實踐
目前 Kong 的最新版本 1.2,Kong 的安裝支持多種方式。官方支持如下列出方式的安裝:
除了官方提供的安裝方式,還有社區(qū)提供的安裝方式,詳細(xì)了解參見:https://konghq.com/install/。
一、安裝Kong
1.構(gòu)建 Kong 的容器網(wǎng)絡(luò)
首先我們創(chuàng)建一個 Docker 自定義網(wǎng)絡(luò),以允許容器相互發(fā)現(xiàn)和通信。在下面的創(chuàng)建命令中 kong-net 是我們創(chuàng)建的 Docker 網(wǎng)絡(luò)名稱。
docker network create kong-net
2.搭建數(shù)據(jù)庫環(huán)境
Kong 目前使用 Cassandra 或者 PostgreSQL,你可以執(zhí)行以下命令中的一個來選擇你的 Database。請注意定義網(wǎng)絡(luò) --network=kong-net 。
使用 PostgreSQL:
docker pull postgres:9.6
docker run -d --name kong-database \\
--network=kong-net \\
-p 5432:5432 \\
-e "POSTGRES_USER=kong" \\
-e "POSTGRES_DB=kong" \\
-e "POSTGRES_PASSWORD=kong" \\
postgres:9.6
3.初始化或者遷移數(shù)據(jù)庫
我們使用 docker run --rm 來初始化數(shù)據(jù)庫,該命令執(zhí)行后會退出容器而保留內(nèi)部的數(shù)據(jù)卷(volume)。這個命令我們還是要注意的,一定要跟你聲明的網(wǎng)絡(luò),數(shù)據(jù)庫類型、host 名稱一致。
下面指定的數(shù)據(jù)庫是 PostgreSQL:
docker run --rm \\
--network=kong-net \\
-e "KONG_DATABASE=postgres" \\
-e "KONG_PG_HOST=kong-database" \\
-e "KONG_PG_PASSWORD=kong" \\
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \\
kong:1.5.1 kong migrations bootstrap
4.啟動 Kong 容器
完成初始化或者遷移數(shù)據(jù)庫后,我們就可以啟動一個連接到數(shù)據(jù)庫容器的 Kong 容器,請務(wù)必保證你的數(shù)據(jù)庫容器啟動狀態(tài),同時檢查所有的環(huán)境參數(shù) -e 是否是你定義的環(huán)境。
docker pull kong:1.5.1
docker run -d --name kong \\
--network=kong-net \\
-e "KONG_DATABASE=postgres" \\
-e "KONG_PG_HOST=kong-database" \\
-e "KONG_PG_PASSWORD=kong" \\
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \\
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \\
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \\
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \\
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \\
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \\
-p 8000:8000 \\
-p 8443:8443 \\
-p 8001:8001 \\
-p 8444:8444 \\
kong:1.5.1
Kong 默認(rèn)綁定 4 個端口:
8000:用來接收客戶端的 HTTP 請求,并轉(zhuǎn)發(fā)到 upstream。
8443:用來接收客戶端的 HTTPS 請求,并轉(zhuǎn)發(fā)到 upstream。
8001:HTTP 監(jiān)聽的 API 管理接口。
8444:HTTPS 監(jiān)聽的 API 管理接口。
到這里,Kong 已經(jīng)安裝完畢,我們可以使用 docker ps 命令查看當(dāng)前運(yùn)行容器,正常情況下可以看到 Kong 和 PostgreSQL 的兩個容器:
docker ps
我們可以通過 curl -i http://192.168.1.200:8001 來查看 Kong 是否運(yùn)行完好。
二、安裝Kong UI
Kong 企業(yè)版提供了管理 UI,開源版本是沒有的。但是有很多的開源的管理 UI ,其中比較流行的有Kong Dashboard 和 Konga。簡單介紹一下 Kong Dashboard 和 Konga。
1.Kong Dashboard
docker 環(huán)境中安裝運(yùn)行如下:
docker pull pgbi/kong-dashboard
docker run --rm \\
--network=kong-net \\
-p 8080:8080 \\
pgbi/kong-dashboard start \\
--kong-url http://kong:8001
啟動之后,可以在瀏覽器中輸入 http://192.168.1.200:8080/ 來訪問 Kong Dashboard 管理界面。
2.Konga
Konga(官網(wǎng)地址:pantsel.github.io/konga/,Github地址:github.com/pantsel/kon… )可以很好地通過 UI 觀察到現(xiàn)在 Kong 的所有的配置,并且可以對于管理Kong節(jié)點情況進(jìn)行查看、監(jiān)控和預(yù)警。Konga主要是用 AngularJS 寫的,運(yùn)行于 nodejs 服務(wù)端。具有以下特性:
- 管理所有 Kong Admin API 對象。
- 支持從遠(yuǎn)程源(數(shù)據(jù)庫,文件,API等)導(dǎo)入使用者。
- 管理多個 Kong 節(jié)點。使用快照備份,還原和遷移 Kong 節(jié)點。
- 使用運(yùn)行狀況檢查監(jiān)視節(jié)點和 API 狀態(tài)。
- 支持電子郵件和閑置通知。
- 支持多用戶。
- 易于數(shù)據(jù)庫集成(MySQL,PostgresSQL,MongoDB,SQL Server)。
下面使用的 PostgreSQL 是和上面在 docker 環(huán)境中安裝 Kong 時的是一致的,注意用戶名、密碼、數(shù)據(jù)庫名稱等配置,docker 環(huán)境安裝啟動 Konga:
docker pull pantsel/konga
docker run -d -p 1337:1337 \\
--network kong-net \\
--name konga \\
-e "DB_ADAPTER=postgres" \\
-e "DB_URI=postgresql://kong:kong@kong-database/kong" \\
pantsel/konga
如果 Konga 容器啟動成功,可以通過 http://192.168.1.200:1337/ 訪問管理界面。通過注冊后進(jìn)入,然后在 CONNECTIONS 中添加 Kong 服務(wù)的管理路徑 http://192.168.1.200:8001。Konga 管理界面示例如下:
-
網(wǎng)關(guān)
+關(guān)注
關(guān)注
9文章
4586瀏覽量
51493 -
API
+關(guān)注
關(guān)注
2文章
1510瀏覽量
62394 -
nginx
+關(guān)注
關(guān)注
0文章
154瀏覽量
12233 -
go語言
+關(guān)注
關(guān)注
1文章
158瀏覽量
9089
發(fā)布評論請先 登錄
相關(guān)推薦
API信息全掌控,方便你的日志管理——阿里云推出API網(wǎng)關(guān)打通日志服務(wù)
AI邊緣計算網(wǎng)關(guān)介紹
介紹ZigBee網(wǎng)關(guān)的架構(gòu)
介紹LoRaWAN網(wǎng)關(guān)的技術(shù)基礎(chǔ)及其工作原理
ESP8266 Node MCU-API 函數(shù)的詳細(xì)中文說明
什么是API網(wǎng)關(guān)為什么需要API網(wǎng)關(guān)
![什么是<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>為什么需要<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>](https://file1.elecfans.com//web2/M00/A7/50/wKgZomUMQ9CAIcU8AAAdiOfbUrY150.png)
如何在騰訊云上添加LoRaWAN網(wǎng)關(guān),詳細(xì)步驟介紹
![如何在騰訊云<b class='flag-5'>上</b>添加LoRaWAN<b class='flag-5'>網(wǎng)關(guān)</b>,<b class='flag-5'>詳細(xì)</b>步驟<b class='flag-5'>介紹</b>](https://file.elecfans.com/web1/M00/C0/4D/pIYBAF79qxuAHEWlAAFCHrJpd-c736.png)
Service Mesh和API網(wǎng)關(guān)正在逐步融合
關(guān)于API網(wǎng)關(guān)策略的知識分享
API 網(wǎng)關(guān)詳細(xì)介紹(下)
![<b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b><b class='flag-5'>詳細(xì)</b><b class='flag-5'>介紹</b>(下)](https://file1.elecfans.com/web2/M00/82/73/wKgaomRTelaABb2BAAL5-aPx0dg202.jpg)
為什么需要 API 網(wǎng)關(guān)?
![為什么需要 <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b>?](https://file1.elecfans.com/web2/M00/82/74/wKgZomRTfnOASqZEAABQNpSYozo150.jpg)
企業(yè)怎么選擇API網(wǎng)關(guān)
![企業(yè)怎么選擇<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>](https://file1.elecfans.com/web2/M00/88/8D/wKgaomRsLXCAJ_xvAAAWyc24u8s958.jpg)
api網(wǎng)關(guān) kong 教程入門
![<b class='flag-5'>api</b><b class='flag-5'>網(wǎng)關(guān)</b> kong 教程入門](https://file1.elecfans.com/web2/M00/AD/6F/wKgaomVNpTqAMAbcAAIZwsLvplM107.jpg)
評論