Compartilhar via


Executar o construtor de API de Dados em um contêiner do Docker

O DAB (Construtor de API de Dados) é publicado como uma imagem de contêiner no Registro de Contêiner da Microsoft. Qualquer host do Docker pode baixar a imagem de contêiner e executar o DAB com configuração mínima. Este guia usa a imagem de contêiner e um arquivo de configuração local para hospedar e executar rapidamente o DAB sem a necessidade de instalar nenhuma ferramenta extra.

Pré-requisitos

Criar dados de exemplo

Para este guia curto, uma tabela simples com algumas linhas de dados é suficiente para demonstrar como usar o DAB em um contêiner do Docker. Para simplificar ainda mais as coisas, usamos o SQL Server para Linux em uma imagem de contêiner do Docker.

  1. Puxar a imagem do contêiner mcr.microsoft.com/mssql/server:2022-latest.

    docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  2. Execute a imagem de contêiner publicando a 1433 porta e definindo a senha da sa conta para uma senha exclusiva que você usa ao longo deste guia.

    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

    Esta é uma senha fictícia simples para este guia. No mundo real, você usaria um mecanismo de autenticação diferente e, idealmente, uma conta diferente.

  3. Conecte-se ao SQL Server usando seu cliente ou ferramenta preferencial. A cadeia de conexão é Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;.

  4. Crie um novo banco de dados nomeado Library se ele ainda não existir.

    IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
    BEGIN
        CREATE DATABASE Library;
    END
    GO
    
    USE Library
    
  5. Crie uma tabela nomeada Books comid, , titleyeare pages colunas.

    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. Insira quatro linhas de livro de exemplo na Books tabela.

    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. Teste seus dados com uma consulta simples SELECT * .

    SELECT * FROM dbo.Books
    

Criar arquivo de configuração

Crie um arquivo de configuração mapeado para a tabela criada nas etapas anteriores. Este arquivo de configuração descreve ao DAB como mapear os endpoints REST e GraphQL para seus dados reais.

  1. Crie um arquivo chamado dab-config.json.

    Dica

    Esse é o nome de arquivo padrão para arquivos de configuração. Usando o nome de arquivo padrão, você evita a necessidade de especificar o arquivo de configuração ao executar o contêiner.

  2. Adicione este conteúdo JSON ao arquivo. Essa configuração cria uma única entidade chamada book mapeada para a tabela existente 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"
            }
          ]
        }
      }
    }
    

Fazer pull e executar a imagem de contêiner do Docker

Execute o DAB usando a imagem de contêiner do Docker hospedada no Registro de Contêiner da Microsoft. Ao executar a imagem de contêiner, monte um diretório para que o DAB possa ler o arquivo de configuração.

  1. Baixar a imagem do contêiner Docker mcr.microsoft.com/azure-databases/data-api-builder.

    docker pull mcr.microsoft.com/azure-databases/data-api-builder
    
  2. Execute o contêiner que publica a porta 5000 e monte o arquivo dab-config.json.

    docker run \
        --name dab \
        --publish 5000:5000 \
        --detach \
        --mount type=bind,source=$(pwd)/dab-config.json,target=/App/dab-config.json,readonly \
        mcr.microsoft.com/azure-databases/data-api-builder
    
  3. Use um navegador da Web para navegar até http://localhost:5000/api/book. A saída deve ser um array JSON de itens de livro do endpoint da 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
        }
      ]
    }
    

    Observação

    Este guia usa uma conexão HTTP. Ao executar um contêiner do Construtor de API de Dados no Docker, você verá que somente o ponto de extremidade HTTP está mapeado. Se quiser que o contêiner do Docker dê suporte a HTTPS para desenvolvimento local, você precisará fornecer seu próprio certificado SSL/TLS e arquivos de chave privada necessários para criptografia SSL/TLS e expor a porta HTTPS. Um proxy reverso também pode ser usado para impor que os clientes se conectem ao servidor por HTTPS para garantir que o canal de comunicação seja criptografado antes de encaminhar a solicitação para o contêiner.