Observação:

Usar o OCI API Gateway, Functions e Observability para Validar Conteúdo JSON e Monitorar Cabeçalhos e Corpo de API

Introdução

Quando desenvolvemos aplicativos distribuídos, especialmente em arquiteturas baseadas em microsserviços, queremos componentes que sejam dimensionados e tenham um bom desempenho em sua execução. Eles têm arquiteturas muito complexas, componentes que executam outros componentes, que executam outros componentes e assim por diante em um número infinito de chamadas intermináveis.

Planejar como desenvolver cada um deles é uma tarefa enorme. Você pode expor seus microsserviços criados em um cluster do Kubernetes por meio do Oracle Cloud Infrastructure API Gateway (OCI API Gateway). Há uma série de recursos, como executar autenticação e autorização de chamadas, validação de dados e otimização de chamadas, para citar apenas alguns. Há também a possibilidade de executar chamadas com o OCI Functions com o objetivo de criar mecanismos de autenticação e autorização personalizados, quando os métodos existentes não são suficientes para resolver a necessidade.

Este tutorial mostrará como usar o mecanismo personalizado para validar alguns casos de uso, como:

Apesar de ser um mecanismo para autenticação e autorização no OCI API Gateway, ele pode ajudar com algumas outras necessidades, como:

Objetivos

Pré-requisitos

Tarefa 1: Configurar a Observabilidade do OCI

  1. Crie um log na tenancy do OCI para ingerir os logs da sua função. Navegue até Observabilidade e Gerenciamento e selecione Logs na Console do OCI.

    log-1

  2. Clique em Criar log personalizado.

    log-2

  3. Informe um nome no campo Nome do log personalizado e escolha um compartimento e um Grupo de Logs apropriados.

    log-3

Observação: é importante capturar o OCID do Log. Você precisará dele para o código.

log-4

Tarefa 2: Criar uma Função do OCI para capturar os HEADERs e o BODY da solicitação de API

Para executar as etapas a seguir, faça download do código aqui function.zip.

Entender o Código

Este código pode ser encontrado aqui function.zip.

Observação: se você não souber como desenvolver uma função e chamá-la no Gateway de API, consulte Chamar uma função usando o Gateway de API.

Configurar a Autenticação do SDK para o OCI

Configure o arquivo de configuração e coloque sua chave privada e impressão digital do OCI com sua função antes de implantá-lo no OCI. Você deve ter os arquivos config e chave privada gerados na instalação e configuração da Interface de Linha de Comando (CLI do OCI) do Oracle Cloud Infrastructure.

Para instalar e configurar sua CLI do OCI, consulte Instalar a CLI do OCI. Esta instalação e configuração irá gerar dois arquivos para você. Encontre o arquivo config e a chave privada (o padrão é oci_api_key.pem). O caminho da pasta será informado nas instruções de instalação.

código-2

Faça download de function.zip para ver o código, o arquivo de configuração e a chave privada. Substitua os arquivos de configuração e de chave privada pelos arquivos da CLI do OCI.

Criar e implantar a OCI Function

Nesta etapa, precisaremos usar a CLI do OCI para criar as funções do OCI e implantar o código em sua tenancy. Para criar uma função do OCI, consulte Funções do OCI QuickStart e procure a opção Python. Você precisará criar sua função com estas informações:

Lembre-se do compartimento que você implantou sua função. Você precisará dessas informações para configurar sua implantação do OCI API Gateway.

Tarefa 3: Configurar a Função do OCI no Gateway de API

Vamos implantar sua API e integrar-se ao seu OCI Functions para validar e enviar parâmetros de solicitação (Cabeçalho e CORPO) para o OCI Observability. Se você não souber como expor seu backend no Gateway de API do OCI, consulte Gateway de API do OCI: Configurar, Criar e Implantar uma API.

  1. Abra Editar implantação.

    config-apigw-1

  2. Clique na Seção Autenticação.

    config-apigw-2

  3. Clique em Autenticação Única e selecione Função do Autorizador.

    config-apigw-2a

  4. Escolha seu compartimento de funções (onde você implantou sua função), selecione o aplicativo fn_apigw_json e sua função python-json-header.

    config-apigw-2b

  5. Configure os Argumentos de Funções para capturar o HEADER e o BODY. Capture o HEADER denominado cabeçalho e header2 e o conteúdo BODY que será nomeado como body.

    config-apigw-2c

  6. Clique em Rotas e configure a Transformação de Cabeçalho. Essa configuração é opcional, apenas para ver o conteúdo da resposta com os dados da solicitação (conteúdo HEADER e BODY) ou os erros gerados na solicitação. Será útil para depurar sua função.

    config-apigw-3

Tarefa 4: Testar sua Solicitação

Observação: em sua Implantação de API, um cache para os argumentos do Functions será ativado se você configurar a Função do Autorizador e configurar os Argumentos do Functions. Você pode estabelecer qual tipo de dados será armazenado em cache. É possível configurar o cache para o parâmetro de consulta ou cabeçalho, mas não para o conteúdo do corpo.

Podemos testar a solicitação de API. Vamos testar com apenas um item em uma matriz no corpo.

curl --location 'https://xxxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/path_index/path' \
    --header 'Content-Type: text/plain' \
    --header 'header: header' \
    --header 'header2: header2' \
    --header 'header3: header3' \
    --data '{"data": {"clientID": "xxxxxxxxxxxxxxxxxxx", "secretID": "xxxxxxxxxxxxxxxxxxx", "jList":[{"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}]}}' -i

O header3 foi enviado, mas mostrado no log porque não foi configurado como um Argumento de Função no Gateway de API do OCI. Há apenas 1 item no array BODY JSON; portanto, é uma solicitação de autorização válida.

teste-1

Vamos colocar mais um item no array e testar.

curl --location 'https://xxxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/path_index/path' \
--header 'Content-Type: text/plain' \
--header 'header: header' \
--header 'header2: header2' \
--header 'header3: header3' \
--data '{"data": {"clientID": "xxxxxxxxxxxxxxxxxxx", "secretID": "xxxxxxxxxxxxxxxxxxx", "jList":[{"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}, {"added_by":"Ani","description":"example description.","start_date":"2014-10-10","mark":255,"id":975}]}}' -i

teste-2

Agradecimentos

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.