使用者在API Gateway建立的API除了能被用戶端調用,還能被API Gateway本身調用。API Gateway自調用允許跨Region調用,如果同Region,可以走內網調用。API Gateway自調同時支援跨帳號調用,使用授權過的AK綁定一個類型為APIGW_FRONTEND的後端簽名外掛程式,API Gateway在調用自身時會使用AK產生簽名發送給目標API Gateway進行鑒權認證。一個典型的情境是,使用者有個負責分發的API,這個API綁定一個後端路由外掛程式和後端簽名外掛程式,後端路由外掛程式根據請求的參數來進行後端路由,路由到其他業務API上。
1. 配置樣本
1.1. 業務API的配置
一個API如果想被API Gateway走內網形式的自身調用,需要開通專享執行個體,把所屬的分組遷移到專享執行個體,並且在控制台手動產生內網調用網域名稱:
1.1.1. 開通專享執行個體上內網調用能力
在左側導覽列選擇執行個體與叢集 > 專享執行個體,找到已建立的專享執行個體,單擊是否允許被API Gateway自身調用開通自調用功能。
1.1.2. 開通分組上的自調用內網網域名稱
在執行個體中產生兩個分組,單擊進入分組詳情,分別為兩個分組開通各自的自調用網域名稱。
假設兩個業務API分組的自調用網域名稱分別為:
17ff4c9189004a1d87b557606b767334-cn-huhehaote-intranet.alicloudapi.com
c6e984b2dd784c0fb843f7c2a8878b15-cn-huhehaote-intranet.alicloudapi.com
1.1.3. 在兩個分組上建立兩個業務API
在每個分組下分別產生一個業務API,兩個API均設定為APP鑒權模式,假設兩個API相關屬性為:
API1: Method: GET Path: /business1 後端地址為:
http://backend1.alicloudapi.com:8080/business1
API2 Method: GET Path: /business2 後端地址為:
http://backend2.alicloudapi.com:8080/business2
1.1.4. 對兩個業務API進行授權
將這兩個API分別授權給同一個APP,這個APP的AK假設為 KEY:TESTKEY SECRET:TESTSECRET
1.2. 分發API的配置
1.2.1. 建立分發API
我們建立一個分發API,這個API設定為匿名訪問,Method設定為Get,Path設定為/distributeAPI,這個API所屬的分組的訪問網域名稱為:17ff4c9189004a1d87b557606b767334-cn-huhehaote.alicloudapi.com
1.2.2. 建立、綁定後端路由外掛程式
建立路由外掛程式,將路由外掛程式綁定到分發API上。
---
parameters:
target: "Query:target"
routes:
- name: backend1
condition: "$target = 'resource1'"
backend:
type: "HTTP"
address: "17ff4c9189004a1d87b557606b767334-cn-huhehaote-intranet.alicloudapi.com"
path: "/business1"
- name: backend2
condition: "$target = 'resource2'"
backend:
type: "HTTP"
address: "c6e984b2dd784c0fb843f7c2a8878b15-cn-huhehaote-intranet.alicloudapi.com"
path: "/business2"
這個路由群組件的意思是,綁定了這個外掛程式的API,收到請求的時候,判斷請求中query參數target,如果target的值為resource1,就給17ff4c9189004a1d87b557606b767334-cn-huhehaote-intranet.alicloudapi.com發送一個path為/business1的HTTP請求,target值為resource2時情況類似。
1.2.3. 建立、綁定後端簽名外掛程式
建立後端簽名外掛程式,將後端簽名外掛程式綁定到分發API上
---
type: APIGW_FRONTEND
key: TESTKEY
secret: TESTSECRET
signatureMethod: HmacSHA256
這個外掛程式的意思是,所有綁定了本外掛程式的API,給後端發送請求時,會將請求中的內容按照API Gateway前端簽名的演算法算出請求的簽名,並攜帶在請求中。
2. 調用分發API
在調用之前,需要確認所有API都發布到線上,之後再做測試:
curl 'http://17ff4c9189004a1d87b557606b767334-cn-huhehaote.alicloudapi.com/distributeAPI?target=resource1' -i
發送給後端的請求:
GET /business1 HTTP/1.1
User-Agent: curl/7.64.1
Via: 0045e52ee3a8400b8501b4c449b28779
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Forwarded-Proto: http
X-Forwarded-For: 192.168.XX.XX, 127.0.0.1
Host: backend1.alicloudapi.com:8080
X-Ca-Request-Id: 23853B41-C54D-45E9-8C43-EE4C1E8A7889
Via: bc48a42a3d17408b991b0bb4d18c23c0
curl 'http://17ff4c9189004a1d87b557606b767334-cn-huhehaote.alicloudapi.com/distributeAPI?target=resource2' -i
發送給後端的請求:
GET /business2 HTTP/1.1
User-Agent: curl/7.64.1
Via: 0045e52ee3a8400b8501b4c449b28779
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Forwarded-Proto: http
X-Forwarded-For: 192.168.XX.XX, 127.0.0.1
Host: backend2.alicloudapi.com:8080
X-Ca-Request-Id: AFD529D2-9B24-437E-8CEC-897E0BCD8B2F
Via: bc48a42a3d17408b991b0bb4d18c23c0