Nota

Migra le API a Oracle Cloud Infrastructure API Gateway con Oracle Integration

Introduzione

Il servizio Oracle Cloud Infrastructure API Gateway (OCI API Gateway) ti consente di pubblicare API con endpoint privati accessibili sulla tua rete e che puoi esporre con indirizzi IP pubblici se vuoi che accettino il traffico Internet. Gli endpoint supportano la convalida delle API, la trasformazione delle richieste e delle risposte, il CORS, l'autenticazione e l'autorizzazione e la limitazione delle richieste.

Il servizio gateway API OCI consente di creare uno o più gateway API in una subnet regionale per elaborare il traffico del client API e instradarlo ai servizi backend. Puoi utilizzare un singolo gateway API per collegare più servizi backend (ad esempio load balancer, istanze di computazione e Oracle Cloud Infrastructure Functions) in un unico endpoint API consolidato.

Puoi accedere al servizio gateway API OCI per definire i gateway API e le distribuzioni API utilizzando la console OCI e l'API REST.

Il servizio OCI API Gateway è integrato con Oracle Cloud Infrastructure Identity and Access Management (OCI IAM), che fornisce una facile autenticazione con la funzionalità di identità nativa Oracle Cloud Infrastructure (OCI).

OCI API Gateway consente di eseguire la distribuzione delle API importando una struttura JSON. Qui è possibile visualizzare il formato di questa struttura Creazione di una specifica di distribuzione API.

{
  "requestPolicies": {},
  "routes": [
    {
      "path": "<api-route-path>",
      "methods": ["<method-list>"],
      "backend": {
        "type": "<backend-type>",
        "<backend-target>": "<identifier>"
      },
      "requestPolicies": {}
    }
  ]
}

Oltre alla console, è possibile distribuire l'API utilizzando l'interfaccia della riga di comando di Oracle Cloud Infrastructure (OCI CLI) e anche il servizio REST OCI per il gateway API OCI. Di seguito è riportata la documentazione per comprendere come distribuire:

Se hai già la struttura API da distribuire nel formato standard del gateway API OCI, è facile distribuirla utilizzando la console (importazione), l'interfaccia CLI OCI o effettuando una chiamata REST. Avendo questa struttura pronta, è facile creare codice per elaborare più file JSON. L'esempio seguente illustra come elaborare i file utilizzando il codice script bash:

#!/bin/bash
# Folder containing JSON files
folder="/<your path to the JSON Files>"
# Loop through the JSON files in the folder
for file in "$folder"/*.json; do
    service="${file##*/}"; service="${service%.*}"
    echo "Service: $service"        # Read and display the contents of the JSON file
    oci api-gateway deployment create --compartment-id ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxx --display-name $service --gateway-id ocid1.apigateway.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxx --path-prefix "/$service" --specification file://$file --debug
    echo "-------------------"
done

In alcune situazioni, sarà necessario gestire le informazioni sui metadati API. Potremmo farlo attraverso il codice utilizzando Python, Java o un altro linguaggio, ma lo scopo di questa esercitazione è quello di utilizzare Oracle Integration per automatizzarlo. Ci sono diversi vantaggi nel farlo in questo modo. È possibile:

Obiettivi

Prerequisiti

Task 1: Comprendere la struttura dei dati API di origine

Possiamo iniziare da una struttura di metadati API. Le definizioni più note sarebbero un OpenAPI o un Swagger.

Se si dispone di un servizio SWAGGER o OpenAPI, è possibile importare i dati API nel gateway API OCI importando i dati nella console OCI, nell'interfaccia CLI OCI o nel servizio REST del gateway API OCI. Vedere Creazione di una risorsa API con una descrizione API.

Se non si dispone di questi formati (Swagger/OpenAPI), è necessario strutturare le definizioni di dati API in un altro formato. In questo compito, lavoreremo con una struttura Excel e, da questa struttura, la trasformeremo in JSON.

Excel_api_migration_source.png

Quindi, c'è una struttura JSON con cui lavorare.

[ {
  "API_NAME" : "cep",
  "TYPE" : "REST",
  "METHOD" : "GET",
  "PATH_PREFIX" : "/okecep",
  "PATH" : "/cep",
  "ENDPOINT" : "http://x.x.x.x/cep",
  "QUERY_PARAMETERS" : "cep",
  "GROOVY_SCRIPT" : "",
  "AUTHENTICATION_TYPE" : "BASIC",
  "ENVIRONMENT" : "QA",
  "HEADER" : "",
  "HEADER_VALUE" : ""
}, {
  "API_NAME" : "calculator",
  "TYPE" : "SOAP",
  "METHOD" : "POST",
  "PATH_PREFIX" : "/dneonline",
  "PATH" : "/calculator",
  "ENDPOINT" : "http://www.example.com/calculator.asmx",
  "QUERY_PARAMETERS" : "",
  "GROOVY_SCRIPT" : "",
  "AUTHENTICATION_TYPE" : "BASIC",
  "ENVIRONMENT" : "DEV",
  "HEADER" : "",
  "HEADER_VALUE" : ""
} ]

Queste strutture di dati API sono disponibili qui: source_apis.json. È possibile strutturare i dati delle definizioni API in qualsiasi formato, questo è solo un esempio.

Task 2: Comprendere i dati di distribuzione di OCI API Gateway

In questo task è possibile visualizzare il formato nativo per importare le definizioni API nel gateway API OCI. Spesso, una struttura semplice è sufficiente per implementare un'API, ma poiché vengono visualizzati dettagli come sicurezza, regole di intestazione, parametri o altri dettagli, la struttura JSON diventa più grande. Questa sarebbe la struttura JSON completa per qualsiasi tipo di distribuzione. Verrà utilizzato nel flusso di Oracle Integration. Il file è disponibile all'indirizzo: apigw_structure.json.

{
  "requestPolicies": {
    "authentication": {
      "type": "CUSTOM_AUTHENTICATION",
      "tokenHeader": "",
      "tokenQueryParam": "",
      "tokenAuthScheme": "authentication-scheme",
      "isAnonymousAccessAllowed": false,
      "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaac2______kg6fq",
      "maxClockSkewInSeconds": 0,
      "validationPolicy": {
        "type": "REMOTE_DISCOVERY",
        "clientDetails": {
          "type": "CUSTOM",
          "clientId": "client-id",
          "clientSecretId": "secret-ocid",
          "clientSecretVersionNumber": 0
        },
        "sourceUriDetails": {
          "type": "DISCOVERY_URI",
          "uri": "well-known-uri"
        },
        "isSslVerifyDisabled": true,
        "maxCacheDurationInHours": 0,
        "additionalValidationPolicy": {
          "issuers": ["issuer-url", "issuer-url"],
          "audiences": ["intended-audience"],
          "verifyClaims": [{
            "key": "claim-name",
            "values": ["acceptable-value", "acceptable-value"],
            "isRequired": true
          }]
        }
      },
      "tokenHeader": "Authorization",
      "validationPolicy": {
        "type": "REMOTE_DISCOVERY",
        "clientDetails": {
          "type": "CUSTOM",
          "clientId": "5hsti38yhy5j2a4tas455rsu6ru8yui3wrst4n1",
          "clientSecretId": "ocid1.vaultsecret.oc1.iad.amaaaaaa______cggit3q",
          "clientSecretVersionNumber": 1
        },
        "sourceUriDetails": {
          "type": "DISCOVERY_URI",
          "uri": "https://my-idp/oauth2/default/.well-known/openid-configuration"
        },
        "isSslVerifyDisabled": false,
        "maxCacheDurationInHours": 2,
        "additionalValidationPolicy": {
          "issuers": ["https://identity.oraclecloud.com/"],
          "audiences": ["api.dev.io"],
          "verifyClaims": [{
            "key": "is_admin",
            "values": ["service:app", "read:hello"],
            "isRequired": true
          }]
        }
      }
    },
    "mutualTls":{
      "isVerifiedCertificateRequired": true,
      "allowedSans": ["api.weather.com"]
    }
  },
  "routes": [
    {
      "path": "/weather",
      "methods": ["GET"],
      "backend": {
        "type": "HTTP_BACKEND",
        "url": "https://api.weather.gov/${request.auth[region]}"
      },
      "requestPolicies": {
        "authorization": {
          "type": "ANY_OF",
          "allowedScope": [ "weatherwatcher" ]
        },
        "headerValidations": {
          "headers": {
            "name": "header-name",
            "required": true
          },
          "validationMode": "ENFORCING|PERMISSIVE|DISABLED"
        },
        "queryParameterValidations": {
          "parameters": {
            "name": "query-parameter-name",
            "required": true
          },
          "validationMode": "ENFORCING|PERMISSIVE|DISABLED"
        },
        "bodyValidation": {
          "required": true,
          "content": {
            "media-type-1": {
              "validationType": "NONE"
            },
            "media-type-2": {
              "validationType": "NONE"
            }
          },
          "validationMode": "ENFORCING|PERMISSIVE|DISABLED"
        },
        "headerTransformations": {
          "renameHeaders": {
            "items": [
              {
                "from": "original-name",
                "to": "new-name"
              }
            ]
          },
          "setHeaders": {
            "items": [
              {
                "name": "header-name",
                "values": ["header-value"],
                "ifExists": "OVERWRITE|APPEND|SKIP"
              }
            ]
          }
        },
        "queryParameterTransformations": {
          "filterQueryParameters": {
            "type": "BLOCK|ALLOW",
            "items": [
              {
                "name": "query-parameter-name"
              }
            ]
          },
          "renameQueryParameters": {
            "items": [
              {
                "from": "original-name",
                "to": "new-name"
              }
            ]
          },
          "setQueryParameters": {
            "items": [
              {
                "name": "query-parameter-name",
                "values": ["query-parameter-value"],
                "ifExists": "OVERWRITE|APPEND|SKIP"
              }
            ]
          }
        }
      },
      "responsePolicies": {
        "headerTransformations": {
          "filterHeaders": {
            "type": "BLOCK|ALLOW",
            "items": [
              {
                "name": "header-name"
              }
            ]
          },
          "renameHeaders": {
            "items": [
              {
                "from": "original-name",
                "to": "new-name"
              }
            ]
          },
          "setHeaders": {
            "items": [
              {
                "name": "header-name",
                "values": ["header-value"],
                "ifExists": "OVERWRITE|APPEND|SKIP"
              }
            ]
          }
        }
      }
    }
  ]
}

Task 3: Crea connessioni

Ci sono 2 connessioni che dobbiamo creare. La prima connessione è la connessione REST trigger. Questa connessione verrà utilizzata per esporre un endpoint in Oracle Integration. Con questo endpoint, puoi chiamare il processo di migrazione come servizio REST, passando i dati di origine delle API.

La seconda connessione verrà utilizzata per chiamare il servizio REST OCI API Gateway per creare le distribuzioni API. La documentazione REST del gateway API OCI può essere letta qui: Distribuzione delle API tramite REST.

Creare una connessione a Oracle Integration, vedere Creare una connessione REST.

  1. Cercare l'adattatore REST.

    connection_rest_1.png

  2. Indicare un nome e un identificativo, ad esempio il nome "REST_EXPOSE". Questa è la prima connessione. Selezionare il ruolo trigger. Ruolo trigger indica che la connessione verrà esposta come endpoint REST, quindi fare clic su Crea.

    Connection_Rest_2.png

  3. Per l'endpoint trigger, è possibile eseguire una richiesta con l'autenticazione di base di Oracle Integration. È quindi possibile utilizzare un nome utente e una password.

    Connect_Rest_3.png

  4. Nella seconda connessione, come nella prima, indicare un nome e un identificativo (ad esempio, "APIGW_REST_API"). Ricordarsi di selezionare il tipo Richiama a differenza della prima configurazione. Selezionare il REST del gateway API OCI appropriato per la propria area (nell'esempio, l'area è Ashburn). Vedere qui per visualizzare l'endpoint appropriato per gli endpoint del gateway API OCI della propria area. Ottenere le credenziali OCI per fornire l'accesso al servizio OCI API Gateway.

    Connection_Apigateway_Rest_Api.png

Task 4: Creare l'integrazione

Il processo di migrazione dei metadati di origine API nel gateway API OCI è il seguente:

  1. Esporre l'integrazione con la connessione REST trigger creata in precedenza.

    Integration_1.png

  2. Assegnare un nome all'endpoint della richiesta.

    Integration_1a.png

  3. Fornire un percorso (ad esempio, /convert) e selezionare il metodo POST. Ricordarsi di stabilire un payload di richiesta.

    Integration_1b.png

  4. Ora puoi selezionare l'esempio JSON e incollare la struttura di origine JSON.

    Integration_1c.png

  5. Incollare qui il JSON.

    Integrazione_1d.png

  6. Inizializziamo ora le variabili per le istanze del gateway API (ogni ambiente è una nuova istanza del gateway API). Creare una variabile per il metodo di pagamento. Ricorda che puoi usare diversi metodi in REST (GET, POST, PUT, DELETE, ANY) e devi usare POST nei servizi SOAP.

    Integration_2.png

    Integrazione_2a.png

  7. Creare un loop FOR EACH. Questa operazione elaborerà la lista JSON di origine.

    Integration_3.png

  8. Modificare l'azione For Each e trascinare la selezione dell'array di livelli di loop nell'attributo Elemento ricorrente.

    Integrazione_3a.png

  9. Configurare il reindirizzamento dell'ambiente. Creare un'azione Switch e inserire i IF e le assegnazioni per ogni condizione.

    Integration_4.png

  10. Creare la prima condizione per l'ambiente QA.

    Integration_4a.png

  11. Verificare nell'attributo ENVIRONMENT dei metadati di origine e verificare se il valore è "QA".

    Integration_4b.png

  12. Se la condizione è vera, è necessario assegnare l'ambiente corretto. Un valore GatewayID e CompartmentID è un valore OCID. È necessario assegnare gli ID corretti alle variabili.

    Integration_4c.png

  13. Fate lo stesso per gli altri ambienti.

    Integration_5.png

  14. Ora vediamo se la tua API è un servizio REST o SOAP. Se l'API è un servizio SOAP, è necessario configurare il metodo come POST.

    Integration_5a.png

  15. Creare una condizione IF per eseguire il test del tipo di servizio.

    Integration_5b.png

  16. Assegnare il valore POST alla variabile di metodo.

    Integration_5c.png

    Integration_5d.png

  17. In altre situazioni, l'attributo di origine fornisce il metodo corretto.

    Integrazione_5e.png

    Integration_5f.png

  18. Mappiamo gli attributi dei metadati di origine ai parametri del gateway API OCI. Prima dell'azione di mapping, è necessario configurare l'adattatore REST del gateway API OCI.

    Integration_6.png

  19. Configurare la connessione.

    Integrazione_6a.png

  20. Specificare un nome per questo servizio. Il percorso deve essere /deployments e il metodo deve essere POST. Ricordarsi di configurare il payload della richiesta.

    Integration_6b.png

  21. Impossibile incollare la struttura del gateway API OCI JSON a causa delle dimensioni elevate. È quindi necessario caricare un file con il contenuto. La struttura JSON completa è disponibile all'indirizzo apigw_structure.json.

    Integrazione_6c.png

  22. Mappare i metadati di destinazione.

    Integrazione_6d.png

Nota: è possibile visualizzare l'artifact di Oracle Integration qui: Oracle Integration: Migra l'API di origine a OCI API Gateway. Questo esempio di artifact non è destinato ad essere utilizzato come processo finale per la migrazione e ha solo l'obiettivo di illustrare il processo. Utilizzare questo artifact per guidare l'implementazione reale.

Task 5: eseguire il test della migrazione

Per ulteriori informazioni, fare riferimento ai collegamenti seguenti e attenersi alla procedura riportata di seguito.

  1. Aggiungere i dati JSON di origine.

    Test_1.png

  2. Fare clic su Test e attendere il completamento.

    Test_1a.png

  3. Vai alle distribuzioni delle istanze di OCI API Gateway e scopri la creazione delle tue API.

    Test_2.png

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare Oracle Help Center.