Partilhar via


Executar o Construtor de API de Dados num contentor do Docker

O Construtor de API de Dados (DAB) é publicado como uma imagem de contentor no Microsoft Container Registry. Qualquer anfitrião do Docker pode obter a imagem de contentor e executar o DAB com uma configuração mínima. Este guia utiliza a imagem de contentor e um ficheiro de configuração local para alojar e executar rapidamente o DAB sem ter de instalar ferramentas adicionais.

Pré-requisitos

Criar dados de exemplo

Neste breve guia, uma tabela simples com algumas linhas de dados é suficiente para demonstrar como utilizar o DAB num contentor do Docker. Para simplificar ainda mais, utilizamos SQL Server para Linux numa imagem de contentor do Docker.

  1. Extraia a imagem do mcr.microsoft.com/mssql/server:2022-latest contentor.

    docker pull mcr.microsoft.com/mssql/server:2022-latest
    
  2. Execute a imagem de contentor que publica a 1433 porta e defina a palavra-passe da sa conta para uma palavra-passe exclusiva que utiliza 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 palavra-passe simples e fictícia para este guia. No mundo real, utilizaria um mecanismo de autenticação diferente e idealmente uma conta diferente.

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

  4. Create uma nova base de dados com o nome Library se ainda não existir.

    IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
    BEGIN
        CREATE DATABASE Library;
    END
    GO
    
    USE Library
    
  5. Create uma tabela com ido nome Books , title, yeare 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 os seus dados com uma consulta simples SELECT * .

    SELECT * FROM dbo.Books
    

Criar um ficheiro de configuração

Create um ficheiro de configuração que mapeia para a tabela criada nos passos anteriores. Este ficheiro de configuração descreve ao DAB como mapear pontos finais REST e GraphQL para os seus dados reais.

  1. Crie um ficheiro com o nome dab-config.json.

    Dica

    Este é o nome de ficheiro predefinido para ficheiros de configuração. Ao utilizar o nome de ficheiro predefinido, evita ter de especificar o ficheiro de configuração ao executar o contentor.

  2. Adicione este conteúdo JSON ao seu ficheiro. Esta configuração cria uma única entidade denominada 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"
            }
          ]
        }
      }
    }
    

Solicitar e executar a imagem de contentor do Docker

Execute o DAB com a imagem de contentor do Docker alojada no Microsoft Container Registry. Ao executar a imagem de contentor, monte um diretório para que o DAB possa ler o ficheiro de configuração.

  1. Extraia a imagem do contentor do mcr.microsoft.com/azure-databases/data-api-builder Docker.

    docker pull mcr.microsoft.com/azure-databases/data-api-builder
    
  2. Execute o contentor que publica a 5000 porta e vinculte o dab-config.json ficheiro.

    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. Utilize um browser para navegar para http://localhost:5000/api/book. O resultado deve ser uma matriz JSON de itens de livros do ponto final 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
        }
      ]
    }
    

    Nota

    Este guia utiliza uma ligação HTTP. Ao executar um contentor do Construtor de API de Dados no Docker, verá que apenas o ponto final HTTP está mapeado. Se quiser que o contentor do Docker suporte HTTPS para desenvolvimento local, tem de fornecer o seu próprio certificado SSL/TLS e ficheiros de chave privada necessários para a encriptação SSL/TLS e expor a porta HTTPS. Um proxy inverso também pode ser utilizado para impor que os clientes se liguem ao servidor através de HTTPS para garantir que o canal de comunicação é encriptado antes de reencaminhar o pedido para o contentor.