Clientes e o próprio API Gateway podem invocar as APIs criadas no API Gateway. O serviço chama APIs na mesma região por redes internas ou entre regiões pela Internet. Também é possível invocar uma API entre contas diferentes com um par de AccessKey de uma aplicação autorizada, vinculando um plug-in de assinatura de backend do tipo APIGW_FRONTEND. Antes da chamada, o API Gateway usa o par de AccessKey para gerar uma assinatura e a envia à API para autenticação. O recurso Call by API Gateway aplica-se ao seguinte cenário típico: você cria uma API de roteamento de solicitações e vincula a ela um plug-in de roteamento de backend e um plug-in de assinatura de backend. O plug-in de roteamento encaminha as solicitações para outras APIs conforme os parâmetros da requisição.
Exemplo de configuração
1. Configure as APIs de negócio
Para que o API Gateway chame sua API por uma Virtual Private Cloud (VPC), execute as etapas a seguir no console do API Gateway: adquira uma instância dedicada, migre o grupo de APIs da API para essa instância e gere manualmente um nome de domínio interno para chamadas via VPC.
-
Ative o recurso Call by API Gateway
a. Faça login no console do API Gateway.
b. No painel de navegação à esquerda, escolha Instances and Clusters > Dedicated Instances. Localize a instância dedicada desejada na aba Instances e clique em Ative ao lado de Calls from API Gateway.
-
Gere nomes de domínio internos para chamadas de API
Crie dois grupos de APIs na instância. Em seguida, clique em cada grupo e gere um nome de domínio interno.
Por exemplo, foram gerados os seguintes nomes de domínio internos:
17ff4c9189004a1d87b557606b767334-cn-huhehaote-intranet.alicloudapi.com
c6e984b2dd784c0fb843f7c2a8878b15-cn-huhehaote-intranet.alicloudapi.com
-
Crie uma API em cada grupo
Crie uma API em cada grupo de APIs. Defina o parâmetro Security Authentication como Alibaba Cloud App para ambas. Os exemplos abaixo mostram os atributos presumidos das duas APIs:
-
API1: Método: GET Caminho: /business1 URL do serviço de backend:
http://backend1.alicloudapi.com:8080/business1 -
API2 Método: GET Caminho: /business2 URL do serviço de backend:
http://backend2.alicloudapi.com:8080/business2
-
-
Autorize uma aplicação a chamar as APIs
Autorize a mesma aplicação a chamar ambas as APIs. Neste exemplo, a aplicação possui o seguinte par de AccessKey: KEY:TESTKEY SECRET:TESTSECRET
2. Configure a API de distribuição
-
Crie a API de distribuição
Crie uma API de distribuição com acesso anônimo. Configure GET como método HTTP, /distributeAPI como caminho e
17ff4c9189004a1d87b557606b767334-cn-huhehaote.alicloudapi.comcomo nome de domínio do grupo de APIs correspondente.
-
Crie e vincule um plug-in de roteamento de backend
Crie um plug-in de roteamento de backend e vincule-o à 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"
O código acima especifica que o plug-in roteia a solicitação recebida conforme o valor do parâmetro target na seção de consulta. Se o valor for resource1, o plug-in encaminha a solicitação para 17ff4c9189004a1d87b557606b767334-cn-huhehaote-intranet.alicloudapi.com e altera o caminho para /business1. Caso o valor seja resource2, o encaminhamento ocorre da mesma forma.
-
Crie e vincule um plug-in de assinatura de backend
Crie um plug-in de assinatura de backend e vincule-o à API.
---
type: APIGW_FRONTEND
key: TESTKEY
secret: TESTSECRET
signatureMethod: HmacSHA256
O código acima determina o cálculo da assinatura com base no conteúdo da solicitação recebida e no algoritmo usado pelo front-end. Em seguida, o plug-in adiciona a assinatura calculada à requisição e a envia ao serviço de backend.
3. Chame a API de distribuição
Antes de chamar a API, certifique-se de que todas as APIs envolvidas estejam publicadas e testadas adequadamente.
curl 'http://17ff4c9189004a1d87b557606b767334-cn-huhehaote.alicloudapi.com/distributeAPI?target=resource1' -i
O trecho de código a seguir mostra um exemplo de solicitação enviada a um serviço de backend:
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
O trecho a seguir apresenta outro exemplo de solicitação enviada a um serviço de backend:
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