Generazione di SDK per una risorsa API

Scopri come generare un SDK per un'API da una descrizione API con il servizio API Gateway per fornire agli sviluppatori l'accesso programmatico ai servizi backend.

Quando si utilizza il servizio Gateway API, è possibile generare SDK (Software Development Kit) per una risorsa API. Se si utilizza la risorsa API per distribuire un'API su un gateway API, gli SDK generati offrono agli sviluppatori l'accesso programmatico all'API. Per semplificare l'integrazione con l'API, puoi generare SDK per una serie di linguaggi e piattaforme, tra cui:

  • Android
  • Java
  • JavaScript
  • Swift
  • TypeScript

Dopo aver generato un SDK, puoi scaricare un file zip contenente le risorse SDK (librerie di client API, configurazioni e documentazione) e distribuirlo agli sviluppatori che scrivono codice per accedere all'API.

Per generare un SDK per una risorsa API, è necessario aver creato una descrizione API per la risorsa API. Per creare una descrizione API, caricare un file di descrizione API (a volte denominato 'Specifica API' o 'Specifica API') scritto in una lingua supportata. Attualmente sono supportate le specifiche OpenAPI versione 2.0 (precedentemente Swagger Specification 2.0) e versione 3.0. Per ulteriori informazioni sulle risorse API e sulle relative descrizioni, vedere Creazione di una risorsa API con una descrizione API.

La generazione di un SDK mediante il servizio Gateway API è facoltativa. Puoi distribuire un'API su un gateway API senza generare un SDK. Allo stesso modo, puoi fornire l'accesso programmatico a un'API distribuita su un gateway API con un SDK creato in un altro strumento. Inoltre, puoi utilizzare il servizio Gateway API semplicemente per generare un SDK da un file di descrizione API, senza utilizzare la risorsa API associata per distribuire un'API su un gateway API.

Nota:

  • Una risorsa API può avere:
    • zero SDK
    • uno o più SDK per la stessa lingua o piattaforma
    • uno o più SDK per lingue o piattaforme diverse
  • È possibile generare un SDK completamente nuovo. Ogni SDK generato ha un identificativo univoco (OCID). Non è possibile "rigenerare" un SDK esistente già generato (anche se è possibile modificare il nome visualizzato di un SDK esistente).
  • È responsabilità dell'utente gestire gli SDK generati. Se si carica una versione aggiornata di un file di descrizione API da cui è stato precedentemente generato un SDK, un nuovo SDK non viene generato automaticamente. È necessario decidere se generare o meno un nuovo SDK. Se si genera un nuovo SDK, è necessario decidere se eliminare o conservare l'SDK esistente.
  • È possibile generare un SDK solo se un file di descrizione API caricato non ha superato i controlli di convalida. Tenere presente che è possibile generare un SDK se il file di descrizione API caricato ha superato i controlli di convalida con avvertenze. Tuttavia, si consiglia di risolvere eventuali avvertenze prima di generare l'SDK.
  • Per generare un SDK per una risorsa API da un file di descrizione API caricato, utilizzare la console:

    1. Nella pagina della lista API selezionare la risorsa API per la quale si desidera generare un SDK. Per assistenza nella ricerca della pagina di elenco, vedere Elenco delle risorse API.
    2. Se non è stato ancora caricato un file di descrizione API, seguire le istruzioni in Creazione di una risorsa API con una descrizione API per creare una risorsa API e specificare un file di descrizione API da caricare.
    3. Nella pagina Dettagli API, selezionare SDK dalla lista Risorse, quindi selezionare Crea SDK.
    4. Nella finestra di dialogo Crea SDK:
      1. Specificare:
        • Nome: il nome del nuovo SDK. Evitare di fornire informazioni riservate.
        • Linguaggio di programmazione: il linguaggio di programmazione o la piattaforma per la quale si desidera generare un SDK dal file di descrizione API caricato.
        • Proprietà <Language>: a seconda del linguaggio di programmazione o della piattaforma scelta, specificare i valori per le proprietà specifiche del linguaggio o della piattaforma. Le proprietà obbligatorie vengono sempre visualizzate. Selezionare Mostra proprietà facoltative per visualizzare e immettere valori per proprietà facoltative aggiuntive.
      2. (Facoltativo) Selezionare Mostra opzioni avanzate e, facoltativamente, specificare:
        • Tag: se si dispone delle autorizzazioni per creare una risorsa, si dispone anche delle autorizzazioni per applicare tag in formato libero a tale risorsa. Per applicare una tag defined, è necessario disporre delle autorizzazioni per utilizzare la tag namespace. Per ulteriori informazioni sull'applicazione di tag, vedere Tag risorsa. Se non sei sicuro di applicare i tag, salta questa opzione o chiedi a un amministratore. È possibile applicare le tag in un secondo momento.
      3. Selezionare Crea per generare il nuovo SDK.

      L'SDK viene generato. Si noti che la generazione dell'SDK può richiedere alcuni minuti.

      Quando l'SDK è stato generato correttamente, la pagina Dettagli SDK mostra il linguaggio di programmazione o la piattaforma specificati per l'SDK e i valori delle proprietà obbligatorie e facoltative.

    5. Selezionare Scarica SDK per ottenere un file zip contenente le risorse SDK (librerie client API, configurazioni e documentazione) generate dal file di descrizione API per la risorsa API.

    Dopo aver generato correttamente l'SDK per la risorsa API, è possibile distribuire il file zip agli sviluppatori che stanno scrivendo codice per accedere all'API.

  • Per generare un SDK per una risorsa API da un file di descrizione API caricato, utilizzare l'interfaccia CLI:

    1. Configurare l'ambiente client per l'uso dell'interfaccia CLI (Configuring Your Client Environment to use the CLI for API Gateway Development).
    2. Aprire un prompt dei comandi ed eseguire oci api-gateway sdk-language-type per scoprire i linguaggi e le piattaforme di programmazione per cui è possibile generare un SDK:

      oci api-gateway sdk-language-type list --compartment-id <ocid>

      Vengono visualizzati i linguaggi e le piattaforme di programmazione supportati e i parametri obbligatori e facoltativi da utilizzare con ciascuno di essi.

    3. Eseguire oci api-gateway sdk create per generare l'SDK:
      oci api-gateway sdk create --target-language "<language>" --api-id <api-ocid> --parameters '{"<first-parameter-name>": "<first-parameter-value>", "<second-parameter-name>": "<second-parameter-value>"}'

      dove:

      • <language> è il linguaggio di programmazione o la piattaforma per la quale si desidera generare un SDK dal file di descrizione API caricato.
      • <api-ocid> è l'OCID della risorsa API per la quale si desidera generare il nuovo SDK.
      • --parameters '{"<first-parameter-name>": "<first-parameter-value>", "<second-parameter-name>": "<second-parameter-value>"}' sono il nome e il valore di qualsiasi parametro obbligatorio e/o facoltativo da impostare per il linguaggio di programmazione o la piattaforma scelta.

      Ad esempio:

      • oci api-gateway sdk create --target-language "JAVASCRIPT" --api-id ocid1.apigatewayapi.oc1..aaaaaaa3______psq
      • oci api-gateway sdk create --target-language "SWIFT" --api-id ocid1.apigatewayapi.oc1..aaaaaaa3______psq --parameters '{"projectName": "Hello World", "apiNamePrefix": "hello"}'

      La risposta al comando include quanto riportato di seguito.

      • OCID dell'SDK.
      • Stato del ciclo di vita (ad esempio, SUCCEEDED, FAILED).
      • ID della richiesta di lavoro per creare l'SDK (dettagli delle richieste di lavoro sono disponibili per sette giorni dopo il completamento, l'annullamento o l'errore).

      Se si desidera che il comando attenda la restituzione del controllo fino a quando l'SDK non è stato creato (o la richiesta non è riuscita), includere uno o entrambi i seguenti parametri:

      • --wait-for-state SUCCEEDED
      • --wait-for-state FAILED

      Ad esempio:

      oci api-gateway sdk create --target-language javascript --api-id ocid1.apigatewayapi.oc1..aaaaaaa3______psq --wait-for-state SUCCEEDED

      Tenere presente che non è possibile utilizzare l'SDK finché la richiesta di lavoro non l'ha creata correttamente.

    4. (Facoltativo) Per visualizzare lo stato della richiesta di lavoro che sta creando l'SDK, immettere:

      oci api-gateway work-request get --work-request-id <work-request-ocid>
    5. (Facoltativo) Per visualizzare i log della richiesta di lavoro che sta creando l'SDK, immettere:

      oci api-gateway work-request-log list --work-request-id <work-request-ocid>
    6. (Facoltativo) Se la richiesta di lavoro che sta creando l'SDK non riesce e si desidera esaminare i log degli errori, immettere:

      oci api-gateway work-request-error --work-request-id <work-request-ocid>

    Per ulteriori informazioni sull'uso dell'interfaccia CLI, vedere Command Line Interface (CLI, interfaccia a riga di comando). Per un elenco completo dei flag e delle opzioni disponibili per i comandi della CLI, vedere la Guida della CLI.

  • Eseguire le operazioni riportate di seguito.

    • Operazione CreateSdk per creare un SDK per una risorsa API da un file di descrizione API caricato.
    • Operazione ListSdks per elencare gli SDK già generati.
    • Operazione GetSdk per visualizzare i dettagli di un SDK esistente.
    • Operazione UpdateSdk per modificare il nome visualizzato di un SDK esistente.
    • Operazione DeleteSdk per eliminare un SDK.
    • Operazione ListSdkLanguageTypes per elencare i linguaggi e le piattaforme di programmazione per cui è possibile generare un SDK, insieme a eventuali parametri obbligatori e facoltativi.

Esempi di utilizzo di SDK generati

Dopo aver utilizzato il gateway API per generare un SDK dal file di descrizione API di una risorsa API, è possibile scaricare e installare l'SDK, quindi utilizzarlo per chiamare l'API distribuita in un gateway API.

I passi per scaricare, installare e utilizzare un SDK generato dipendono dalla lingua e dalle funzionalità dell'SDK.

Gli esempi in questa sezione presuppongono che sia stato generato un SDK per un'API del blog in ciascuna delle diverse lingue. Utilizzare gli esempi come guide, che è possibile estendere e adattare per soddisfare le proprie esigenze.

Esempio 1: utilizzo di un SDK Android generato per una risorsa API

Strumenti e versioni utilizzati in questo esempio:

  • Gradle 6.5
  • Maven 3.6.3
  • Android Studio 4.1.2

Per utilizzare un SDK Android generato dal gateway API dal file di descrizione API di una risorsa API, procedere come segue.

  1. Scaricare il file zip contenente l'SDK Android generato da API Gateway ed estrarne il contenuto.
  2. Nella directory radice estratta dal file zip, installare l'SDK generato nel repository Maven locale eseguendo le operazioni riportate di seguito.
    mvn clean install
  3. Decidi quale progetto Android utilizzerà l'SDK Android generato. Aprire un progetto Android esistente con Gradle come gestore di pacchetti oppure creare un nuovo progetto Android come indicato di seguito.

    1. Apri Android Studio. In File, andare a Nuovo e selezionare Nuovo progetto.
    2. Selezionare Nessuna attività e selezionare Avanti.
    3. In Lingua, selezionare Java e selezionare Fine.
  4. Aggiornare il file build.gradle del modulo per aggiungere l'SDK generato come dipendenza. Ad esempio:
    plugins {
        id 'com.android.application'
    }
    
    android {
        compileSdkVersion 29
        buildToolsVersion "30.0.3"
    
        defaultConfig {
            applicationId "com.example.myapplication"
            minSdkVersion 21
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
            // 2) Connect JUnit 5 to the runner
            testInstrumentationRunnerArgument "runnerBuilder", "de.mannodermaus.junit5.AndroidJUnit5Builder"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    apply plugin: "de.mannodermaus.android-junit5"
    
    dependencies {
        implementation 'com.android.support:multidex:1.0.3'
    
        implementation 'androidx.appcompat:appcompat:1.1.0'
        implementation 'com.google.android.material:material:1.1.0'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    
        androidTestImplementation 'androidx.test.ext:junit:1.1.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
        implementation("com.mock:test-project:1.0.1")
    
    }
    

    Si noti che test-project è stato aggiunto in dependencies.

  5. Eseguire la build del progetto su Android Studio.
  6. Una volta completata la build, importare le classi SDK generate e utilizzarle in una o più classi Java del progetto Android. Ad esempio:
    package com.example.myapplication;
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.os.AsyncTask;
    import android.widget.Toast;
    
    import com.mock.testproject.api.UserV1;
    import com.mock.testproject.api.UsersApi;
    
    public class NetworkTask extends AsyncTask<String,String,String> {
    
        @SuppressLint("StaticFieldLeak")
        private final Context context;
    
        public NetworkTask(Context context) {
            this.context = context;
        }
    
        @Override
        protected String doInBackground(String... strings) {
            try{
                UsersApi usersApi = new UsersApi();
                usersApi.setBasePath("https://0eff7c6c85cc.ngrok.io");
                UserV1 a = usersApi.getUsersUsername("a");
                return a.toString();
            }catch (Exception e){
                e.printStackTrace();
                return e.getMessage();
            }
        }
    
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Toast.makeText(context, s, Toast.LENGTH_LONG).show();
        }
    }
    

Utilizzare l'esempio precedente come guida, che è possibile estendere e adattare per soddisfare le proprie esigenze.

Esempio 2: utilizzo di un SDK Java generato per una risorsa API

Strumenti e versioni utilizzati in questo esempio:

  • Maven 3.6.3
  • Java 1.8.0

Per utilizzare un SDK Java generato dal gateway API dal file di descrizione API di una risorsa API, procedere come segue.

  1. Scaricare il file zip contenente l'SDK Java generato dal gateway API ed estrarne il contenuto.
  2. Nella directory radice estratta dal file zip, installare l'SDK generato nel repository Maven locale eseguendo le operazioni riportate di seguito.
    mvn clean install
  3. Decidere quale progetto Maven utilizzerà l'SDK Java generato. Aggiornare un progetto Maven esistente oppure creare un nuovo progetto Maven eseguendo le operazioni riportate di seguito.
    mvn -B archetype:generate -DarchetypeGroupdId=org.apache.maven.archetypes -DgroupId=examples.com.testApp -DartifactId=test-maven-project
  4. Aggiornare il file pom.xml del progetto Maven per aggiungere l'SDK generato come dipendenza. Ad esempio:
    <dependency>
      <groupId>com.mock.test</groupId>
      <artifactId>integration-java</artifactId>
      <version>1.0.0</version>
      <scope>compile</scope>
    </dependency>
    
    
  5. Nella directory radice del progetto Maven, eseguire:
    mvn clean install
  6. Una volta completata l'installazione Maven, importare le classi SDK generate e utilizzarle nel progetto Maven. Ad esempio:
    import com.mock.test.integration.ApiClient;
    import com.mock.test.integration.ApiException;
    import com.mock.test.integration.api.UsersApi;
    import com.mock.test.integration.model.UserV1;
    
    public class SdkTest {
    
        private String basePath;
        private UsersApi usersApi;
        private UsersApi loggedInUsersApi;
    
        public void setUpAndListUsers(){
            ApiClient loggedInClient = new ApiClient();
            loggedInClient.setPassword("password");
            loggedInClient.setUsername("username");
            loggedInUsersApi = new UsersApi(loggedInClient);
                    List<UserV1> users = loggedInUsersApi.getUsers();
    	}
          }
    

Utilizzare l'esempio precedente come guida, che è possibile estendere e adattare per soddisfare le proprie esigenze.

Esempio 3: utilizzo di un SDK JavaScript generato per una risorsa API

Strumenti e versioni utilizzati in questo esempio:

  • Npm 6.14.0

Per utilizzare un SDK JavaScript generato dal gateway API dal file di descrizione API di una risorsa API, procedere come segue.

  1. Scaricare il file zip contenente l'SDK JavaScript generato dal gateway API ed estrarne il contenuto.
  2. Nella directory radice estratta dal file zip, eseguire:
    npm install
    npm link
  3. Nella directory principale di un progetto npm esistente, eseguire:
    npm link <path_to_javascript_client_dir>
    Ad esempio:
    npm link "/Users/ajay.d.dubey/Downloads/Simple API overview_JAVASCRIPT_v26544725374050339058" 
  4. Nel file .js da cui chiamare i servizi, importare e utilizzare l'SDK generato. Ad esempio:
    const Blog = require("blog");
    const apiClient = new Blog.ApiClient();
    apiClient.defaultHeaders = { authorization: "audio/basic" };
    apiInstance = new Blog.UsersApi(apiClient);
    
    //get user
    apiInstance.getUsersUsername(
        "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
        (error, data, response) => {
            if (error) throw error;
    	      console.log(response.statusCode);
            console.log(response)
       }
    );
    
    //put user
    let opts = {
        userV1: new Blog.UserV1(
            "Test",
            "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
            "password",
            "a@b.com"
        ),
    };
    apiInstance.putUsersUsername(
        "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
        opts,
        (error, data, response) => {
            if (error) throw error;
    	      console.log(response.statusCode);
            console.log(response)
        }
    );
    

    In questo esempio, il nome dell'SDK generato è blog. Cercare nel file package.json estratto il nome del kit SDK generato.

Utilizzare l'esempio precedente come guida, che è possibile estendere e adattare per soddisfare le proprie esigenze.

Esempio 4: utilizzo di un SDK Swift generato per una risorsa API

Strumenti e versioni utilizzati in questo esempio:

  • XCode 12.4
  • Swift 5.3.1
  • CocoaPods 1.10.1

Per utilizzare un SDK Swift generato dal gateway API dal file di descrizione API di una risorsa API, procedere come segue.

  1. Scaricare il file zip contenente l'SDK Swift generato da API Gateway ed estrarne il contenuto.
  2. Decidere quale progetto XCode utilizzerà l'SDK Swift generato. Aggiornare un progetto XCode esistente oppure creare un nuovo progetto XCode come indicato di seguito.
    1. Aprire XCode. In File, andare a Nuovo e selezionare Progetto.
    2. Selezionare Applicazione e Avanti.
    3. In Lingua, selezionare Swift e selezionare Successivo.
    4. Specificare una posizione per il progetto e selezionare Crea per creare il progetto XCode.
  3. Se la directory radice del progetto XCode non contiene già un podfile, creare un podfile eseguendo:
    pod init
  4. Aggiornare il podfile per aggiungere un riferimento all'SDK generato. Ad esempio:
    target 'test-project-3' do
      		# Comment the next line if you don't want to use dynamic frameworks
      		use_frameworks!
      		# Pods for test-project-3
    			pod 'mysdk', :path => '/Users/ajay.d.dubey/workspace-2/swift/Blog_SWIFT_1.0.01209182890182739216'
    		end
    
  5. Nella directory radice del progetto XCode, eseguire:
    pod install

    Output di esempio:

    ~/workspace-2/swift/test-project-3 on main ?1 ❯ pod install                    took 1m 4s at 09:50:31
    Analyzing dependencies
    Downloading dependencies
    Installing mysdk (1.0.0)
    Generating Pods project
    Integrating client project
    
    [!] Please close any current Xcode sessions and use `test-project-3.xcworkspace` for this project from now on.
    Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
    
    [!] Automatically assigning platform `iOS` with version `14.4` on target `test-project-3` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
    
  6. Chiudere qualsiasi istanza aperta di XCode.
  7. Nella directory radice del progetto XCode aprire il file .xcworkspace per visualizzare il pod.
  8. Aggiornare qualsiasi file rapido per importare il pod e iniziare a utilizzare l'SDK generato. Ad esempio, aggiornare il file ViewController.swift per importare il pod mysdk come indicato di seguito.
    import UIKit
    import mysdk
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
    
            mysdkAPI.credential = URLCredential.init(user: "username", password: "password", persistence: .permanent)
            mysdkAPI.customHeaders = ["Content-Type":"application/json","Authorization":"Basic 1234"]
            mysdk.UsersAPI.getUsers(completion: getUsers)
            
            mysdk.UsersAPI.getUsersUsername(username: "046B6C7F-0B8A-43B9-B35D-6489E6DAEE91", completion: responseUserUsername)    
            
           }
      func getUsers(users :[mysdk.UserV1]?, error:Error?) -> Void{
            print("Attempting fetching user details:")
            print(users)
           }
        
      func responseUserUsername(user :mysdk.UserV1?, error:Error?){
      print("Attempting fetching user with username:")
      print("Successful Request")
      print (user)
            
    		}
    

Utilizzare l'esempio precedente come guida, che è possibile estendere e adattare per soddisfare le proprie esigenze.

Esempio 5: utilizzo di un SDK TypeScript generato per una risorsa API

Strumenti e versioni utilizzati in questo esempio:

  • filato 1.22.10
Nota

In questo esempio viene illustrato come creare e utilizzare un SDK TypeScript generato utilizzando il filato. Se si desidera utilizzare un SDK TypeScript generato utilizzando NPM, attenersi alla procedura per utilizzare un SDK JavaScript generato utilizzando NPM, illustrata nell'Esempio 3: uso di un SDK JavaScript generato per una risorsa API.

Per utilizzare un SDK TypeScript generato dal gateway API dal file di descrizione API di una risorsa API, procedere come segue.

  1. Scaricare il file zip contenente l'SDK TypeScript generato dal gateway API ed estrarne il contenuto.
  2. Nella directory radice estratta dal file zip, eseguire:
    yarn install
    yarn run build
    yarn link
  3. Nella directory radice del progetto che si desidera utilizzare l'SDK generato:
    1. Esegui:
      yarn link <project-name>

      dove <project name> è il nome dell'SDK generato. Cercare nel file package.json estratto il nome del kit SDK generato. Ad esempio:

      yarn link test-project
    2. Esegui:
      yarn install
  4. Aggiornare il file ts del progetto che si desidera utilizzare l'SDK generato. Ad esempio:
    const Blog = require("blog");
    const expect = require("chai").expect;
    let apiInstance;
    let apiInstanceWithoutHeader;
    
    before(function () {
        const apiClient = new Blog.ApiClient();
        apiClient.defaultHeaders = { authorization: "audio/basic" };
        apiInstance = new Blog.UsersApi(apiClient);
        apiInstanceWithoutHeader = new Blog.UsersApi();
    });
    
    describe("UsersApi", function () {
        it("should call add delete username successfully", function (done) {
            apiInstance.deleteUsersUsername(
                "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
                (error, data, response) => {
                    if (error) throw error;
                    console.log(response.statusCode);
                    console.log(response)
                    expect(response.statusCode).to.equal(204);
                    expect(data).to.equal(null);
                    done();
                }
            );
        });
        it("should update user details successfully", function (done) {
            let opts = {
                userV1: new Blog.UserV1(
                    "Test",
                    "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
                    "password",
                    "a@b.com"
                ),
            };
            apiInstance.putUsersUsername(
                "046b6c7f-0b8a-43b9-b35d-6489e6daee91",
                opts,
                (error, data, response) => {
                    if (error) throw error;
                    expect(response.statusCode).to.equal(202);
                    expect(data).to.not.null;
                    done();
                }
            );
        });
    
        });
    
    

Utilizzare l'esempio precedente come guida, che è possibile estendere e adattare per soddisfare le proprie esigenze.