Note:

Uso de OCI API Gateway, Functions y Observability para validar el contenido JSON y supervisar las cabeceras y el cuerpo de la API

Introducción

Cuando desarrollamos aplicaciones distribuidas, especialmente en arquitecturas basadas en microservicios, queremos componentes que se escalen y funcionen bien en su ejecución. Tienen arquitecturas muy complejas, componentes que ejecutan otros componentes, que ejecutan otros componentes, etc. en un número infinito de llamadas sin fin.

Planear cómo desarrollar cada uno de ellos es una tarea enorme. Puede exponer los microservicios creados en un cluster de Kubernetes a través de Oracle Cloud Infrastructure API Gateway (OCI API Gateway). Hay una serie de utilidades, como realizar autenticación y autorización de llamadas, validación de datos y optimización de llamadas, por nombrar solo algunas. También existe la posibilidad de ejecutar llamadas con OCI Functions con el objetivo de crear mecanismos de autenticación y autorización personalizados, cuando los métodos existentes no son suficientes para resolver la necesidad.

En este tutorial se mostrará cómo utilizar el mecanismo personalizado para validar algunos casos de uso como:

A pesar de ser un mecanismo de autenticación y autorización en OCI API Gateway, podría ayudar con otras necesidades, como:

Objetivos

Requisitos

Tarea 1: Configuración de OCI Observability

  1. Cree un log en su arrendamiento de OCI para ingerir los logs de su función. Vaya a Observación y gestión y seleccione Logs en la consola de OCI.

    log-1

  2. Haga clic en Crear log personalizado.

    log-2

  3. Introduzca un nombre en el campo Nombre de log personalizado y seleccione un compartimento y un grupo de logs adecuados.

    log-3

Nota: Es importante capturar el OCID del log, lo necesitará para el código.

log-4

Tarea 2: Creación de una función de OCI para capturar los HEADER y BODY desde la solicitud de API

Para ejecutar los siguientes pasos, descargue el código desde aquí function.zip.

Descripción del código

Este código se puede encontrar aquí function.zip.

Nota: si no sabe cómo desarrollar una función y llamarla en API Gateway, consulte Llamada a una función mediante API Gateway.

Configuración de la autenticación SDK en OCI

Debe configurar el archivo de configuración y colocar la clave privada y la huella de OCI con su función antes de desplegarlo en OCI. Debe tener los archivos config y private key generados en la instalación y configuración de la interfaz de línea de comandos (CLI de OCI) de Oracle Cloud Infrastructure.

Para instalar y configurar la CLI de OCI, consulte Instalación de la CLI de OCI. Esta instalación y configuración generarán dos archivos para usted. Busque el archivo config y private key (el valor predeterminado es oci_api_key.pem). La ruta de la carpeta se informará en las instrucciones de instalación.

código-2

Descargue function.zip para ver el código, el archivo de configuración y la clave privada. Sustituya los archivos de configuración y clave privada por los archivos de la CLI de OCI.

Creación y despliegue de la función OCI

En este paso, necesitaremos utilizar la CLI de OCI para crear las funciones de OCI y desplegar el código en su arrendamiento. Para crear una función de OCI, consulte OCI Functions QuickStart y busque la opción Python. Necesitará crear su función con esta información:

Recuerde el compartimento que ha desplegado la función. Necesitará esta información para configurar el despliegue de OCI API Gateway.

Tarea 3: Configuración de la función OCI en API Gateway

Vamos a desplegar la API e integrarla con OCI Functions para validar y enviar parámetros de solicitud (cabecera y cuerpo) a OCI Observability. Si no sabe cómo exponer el backend en el gateway de API de OCI, consulte Gateway de API de OCI: configuración, creación y despliegue de una API.

  1. Abra Editar despliegue.

    config-apigw-1

  2. Haga clic en la sección Autenticación.

    configuración-apigw-2

  3. Haga clic en Autenticación única y seleccione Función de autorizador.

    configuración-apigw-2a

  4. Seleccione el compartimento de funciones (donde ha desplegado la función), seleccione la aplicación fn_apigw_json y la función python-json-header.

    configuración-apigw-2b

  5. Configure los argumentos de Functions para capturar HEADER y BODY. Capture el HEADER denominado header y header2, y el contenido BODY que se denominará body.

    configuración-apigw-2c

  6. Haga clic en Rutas y configure la Transformación de cabecera. Esta configuración es opcional, solo para ver el contenido de la respuesta con los datos de la solicitud (contenido de HEADER y BODY) o los errores generados en la solicitud. Será útil depurar la función.

    config-apigw-3

Tarea 4: Prueba de la solicitud

Nota: en el despliegue de API, se activará una caché para los argumentos de Functions si configura la función de responsable de autorización y configura los argumentos de Functions. Puede establecer qué tipo de datos se almacenará en caché. Puede configurar la caché para el parámetro de consulta o la cabecera, pero no para el contenido del cuerpo.

Podemos probar la solicitud de API. Vamos a probar con un solo elemento en una matriz en el cuerpo.

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

Se ha enviado header3, pero se muestra en el log porque no se ha configurado como argumento de función en OCI API Gateway. Solo hay 1 elemento en la matriz BODY JSON, por lo que es una solicitud de autorización válida.

prueba-1

Pongamos un elemento más en la matriz y probemos.

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

prueba-2

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.