Exécuter le générateur d’API de données dans un conteneur Docker

Le générateur d’API de données (DAB) est publié en tant qu’image conteneur dans Microsoft Container Registry. Tout hôte Docker peut extraire l’image conteneur et exécuter DAB avec une configuration minimale. Ce guide utilise l’image conteneur et un fichier de configuration local pour héberger et exécuter rapidement DAB sans avoir à installer d’outils supplémentaires.

Prerequisites

Créer des exemples de données

Pour ce court guide, une table simple avec quelques lignes de données est suffisante pour montrer comment utiliser DAB dans un conteneur Docker. Pour simplifier davantage, nous utilisons SQL Server pour Linux dans une image conteneur Docker.

  1. Tirez l’image de conteneur mcr.microsoft.com/mssql/server:2022-latest.

    docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  2. Exécutez l’image du conteneur en publiant le port 1433 et en définissant le mot de passe du compte sa sur un mot de passe unique que vous utiliserez tout au long de ce guide.

    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
    

    Important

    Ce mot de passe est une valeur fictive simple pour ce guide. Dans le monde réel, vous utiliseriez un mécanisme d’authentification différent et idéalement un autre compte.

  3. Connectez-vous au serveur SQL à l’aide de votre client ou outil préféré. La chaîne de connexion est Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;.

  4. Créez une base de données nommée Library si elle n’existe pas déjà.

    IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
    BEGIN
        CREATE DATABASE Library;
    END
    GO
    
    USE Library
    
  5. Créez une table nommée Books avec id, title, yearet pages des colonnes.

    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. Insérez quatre exemples de lignes de livre dans la Books table.

    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. Testez vos données avec une requête simple SELECT * .

    SELECT * FROM dbo.Books
    

Créer un fichier de configuration

Créez un fichier de configuration mappé à la table créée lors des étapes précédentes. Ce fichier de configuration indique à DAB comment associer les points de terminaison REST et GraphQL à vos données réelles.

  1. Créez un fichier appelé dab-config.json.

    Conseil / Astuce

    Ce nom de fichier est la valeur par défaut pour les fichiers de configuration. En utilisant le nom de fichier par défaut, vous évitez d’avoir à spécifier le fichier de configuration lors de l’exécution du conteneur.

  2. Ajoutez ce contenu JSON à votre fichier. Cette configuration crée une entité unique nommée book mappée à la table existante 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"
            }
          ]
        }
      }
    }
    

Générer et exécuter une image conteneur Docker personnalisée

Générez une image personnalisée qui inclut dab-config.json, puis exécutez l’image localement.

  1. Créez un fichier Dockerfile dans le même dossier que dab-config.json.

    FROM mcr.microsoft.com/azure-databases/data-api-builder:latest
    COPY dab-config.json /App/dab-config.json
    
  2. Générer l’image.

    docker build -t dab-local:1 .
    
  3. Exécutez le conteneur qui publie le 5000 port.

    docker run \
      --name dab \
      --publish 5000:5000 \
      --detach \
      dab-local:1
    
  4. Utilisez un navigateur web pour accéder à http://localhost:5000/api/book. La sortie doit être un tableau JSON d’éléments de livre à partir du point de terminaison de l’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
        }
      ]
    }
    

    Note

    Ce guide utilise une connexion HTTP. Lorsque vous exécutez un conteneur du générateur d’API de données dans Docker, vous voyez que seul le point de terminaison HTTP est mappé. Si vous souhaitez que votre conteneur Docker prend en charge HTTPS pour le développement local, vous devez fournir vos propres certificats SSL/TLS et fichiers de clés privées requis pour le chiffrement SSL/TLS et exposer le port HTTPS. Un proxy inverse peut également être utilisé pour appliquer que les clients se connectent à votre serveur via HTTPS pour vous assurer que le canal de communication est chiffré avant de transférer la requête à votre conteneur.