Condividi tramite


Eseguire il generatore di API dati in un contenitore Docker

Il generatore di API dati (DAB) viene pubblicato come immagine del contenitore nel Registro Contenitori Microsoft. Qualsiasi host Docker può scaricare l'immagine container ed eseguire DAB con una configurazione minima. Questa guida usa l'immagine del contenitore e un file di configurazione locale per ospitare ed eseguire rapidamente DAB senza la necessità di installare strumenti aggiuntivi.

Prerequisiti

Creare dati di esempio

Per questa breve guida, una tabella semplice con poche righe di dati è sufficiente per illustrare come usare DAB in un contenitore Docker. Per semplificare ulteriormente le operazioni, si usa SQL Server per Linux in un'immagine del contenitore Docker.

  1. Scaricare l'immagine del mcr.microsoft.com/mssql/server:2022-latest contenitore.

    docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  2. Eseguire l'immagine del contenitore pubblicando la porta 1433 e impostare la password dell'account sa su una password univoca utilizzata in tutta questa guida.

    docker run \
        --name mssql \
        --publish 1433:1433 \
        --detach \
        --env "ACCEPT_EULA=Y" \
        --env "MSSQL_SA_PASSWORD=<your-password>" \
        mcr.microsoft.com/mssql/server:2022-latest
    

    Importante

    Questa password è un semplice valore fittizio per questa guida. Nel mondo reale si userebbe un meccanismo di autenticazione diverso e idealmente un account diverso.

  3. Connettersi al server SQL usando il client o lo strumento preferito. La stringa di connessione è Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;.

  4. Creare un nuovo database denominato Library se non esiste già.

    IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
    BEGIN
        CREATE DATABASE Library;
    END
    GO
    
    USE Library
    
  5. Creare una tabella denominata Books con le colonne id, title, year e pages.

    DROP TABLE IF EXISTS dbo.Books;
    
    CREATE TABLE dbo.Books
    (
        id int NOT NULL PRIMARY KEY,
        title nvarchar(1000) NOT NULL,
        [year] int null,
        [pages] int null
    )
    GO
    
  6. Inserire quattro righe del libro di esempio nella Books tabella.

    INSERT INTO dbo.Books VALUES
        (1000, 'Practical Azure SQL Database for Modern Developers', 2020, 326),
        (1001, 'SQL Server 2019 Revealed: Including Big Data Clusters and Machine Learning', 2019, 444),
        (1002, 'Azure SQL Revealed: A Guide to the Cloud for SQL Server Professionals', 2020, 528),
        (1003, 'SQL Server 2022 Revealed: A Hybrid Data Platform Powered by Security, Performance, and Availability', 2022, 506)
    GO
    
  7. Testate i vostri dati con una semplice query SELECT *.

    SELECT * FROM dbo.Books
    

Creare un file di configurazione

Creare un file di configurazione mappato alla tabella creata nei passaggi precedenti. Questo file di configurazione descrive a DAB come eseguire il mapping degli endpoint REST e GraphQL ai dati effettivi.

  1. Creare un file denominato dab-config.json.

    Suggerimento

    Questo nome file è l'impostazione predefinita per i file di configurazione. Usando il nome file predefinito, non è necessario specificare il file di configurazione durante l'esecuzione del contenitore.

  2. Aggiungere questo contenuto JSON al file. Questa configurazione crea una singola entità denominata mappata book alla tabella esistente dbo.Books .

    {
      "$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
      "data-source": {
        "database-type": "mssql",
        "connection-string": "Server=host.docker.internal\\mssql,1433;Initial Catalog=Library;User Id=sa;Password=<your-password>;TrustServerCertificate=true;"
      },
      "runtime": {
        "rest": {
          "enabled": true
        },
        "graphql": {
          "enabled": true
        }
      },
      "entities": {
        "book": {
          "source": "dbo.Books",
          "permissions": [
            {
              "actions": [
                "read"
              ],
              "role": "anonymous"
            }
          ]
        }
      }
    }
    

Compilare ed eseguire un'immagine del contenitore Docker personalizzata

Compilare un'immagine personalizzata che include dab-config.json, quindi eseguire l'immagine in locale.

  1. Creare un Dockerfile nella stessa cartella di dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  2. Compilare l'immagine.

    docker build -t dab-local:1 .
    
  3. Esegui il contenitore pubblicando la porta 5000.

    docker run \
      --name dab \
      --publish 5000:5000 \
      --detach \
      dab-local:1
    
  4. Usare un Web browser per passare a http://localhost:5000/api/book. L'output dovrebbe essere un array JSON di elementi del libro provenienti dall'endpoint API REST.

    {
      "value": [
        {
          "id": 1000,
          "title": "Practical Azure SQL Database for Modern Developers",
          "year": 2020,
          "pages": 326
        },
        {
          "id": 1001,
          "title": "SQL Server 2019 Revealed: Including Big Data Clusters and Machine Learning",
          "year": 2019,
          "pages": 444
        },
        {
          "id": 1002,
          "title": "Azure SQL Revealed: A Guide to the Cloud for SQL Server Professionals",
          "year": 2020,
          "pages": 528
        },
        {
          "id": 1003,
          "title": "SQL Server 2022 Revealed: A Hybrid Data Platform Powered by Security, Performance, and Availability",
          "year": 2022,
          "pages": 506
        }
      ]
    }
    

    Annotazioni

    Questa guida usa una connessione HTTP. Quando si esegue un contenitore di Generatore API dati in Docker, si noterà che viene eseguito il mapping solo dell'endpoint HTTP. Se si vuole che il contenitore Docker supporti HTTPS per lo sviluppo locale, è necessario fornire il proprio certificato SSL/TLS e i file di chiave privata necessari per la crittografia SSL/TLS ed esporre la porta HTTPS. È anche possibile usare un proxy inverso per imporre che i client si connettano al server tramite HTTPS per assicurarsi che il canale di comunicazione sia crittografato prima di inoltrare la richiesta al contenitore.