Data API Builder та Azure Cloud: прощаємося з написанням CRUD

Усі статті, обговорення, новини про DevOps — в одному місці. Підписуйтеся на DOU | DevOps!

Як часто ми пишемо API для бази? А як часто ми повторюємо, копіюємо і вставляємо код зі своїх попередніх проєктів, щоб написати новий CRUD? Відповідь очевидна — це завдання, яке постійно постає перед кожним розробником. Так і навіщо витрачати на цей час, подумала компанія Microsoft, і вирішила зробити свою опенсорс-реалізацію API для баз даних, яка допомагає розв’язати цю проблему.

Data API Builder — це інструмент, який дозволяє розробникам швидко та легко створювати API для доступу до даних. Замість того, щоб писати безліч рутинного коду для кожної операції CRUD, Data API Builder автоматизує цей процес, надаючи розробникам готові конструктори API, які можуть бути налаштовані за допомогою простого інтерфейсу. Це дозволяє зосередитись на бізнес-логіці програми, а не на деталях реалізації доступу до даних. Крім REST API, застосунок також підтримує і GraphQL.

Тож напевно у вас виникло питання, які бази даних підтримує цей інструмент? Відповідь — нижче:

Database

Minimum Supported Version

SQL Server

v2016

Azure SQL

N/A

Azure Cosmos DB for NoSQL

N/A

PostgreSQL

v11

MySQL

v8

Також ви можете ознайомитися з усіма можливостями цього інструменту за посиланням.

У цій статті я хочу розповісти, як встановити та налаштувати Data API Builder на своїй Windows-машині, як розгорнути його в хмарі Azure та використовувати як інструмент, що допоможе вам швидко реалізувати CRUD для вашої бази даних.

Встановлення Data API Builder в Azure Cloud

Для цього ми будемо використовувати Azure Container Apps та базу даних Azure SQL. Ось загальний план робіт — що ми зробимо у хмарі Azure:

  1. Create a managed identity with role-based access control permissions.
  2. Deploy Azure SQL with the sample AdventureWorksLT dataset.
  3. Stage the container image in Azure Container Registry.
  4. Deploy Azure Container App with the Data API builder container image.

Для початку нам необхідно залогінитись та відкрити Azure Cloud Shell, після цього прописати всі змінні оточення, наприклад так

API_CONTAINER_NAME="api$SUFFIX"
CONTAINER_ENV_NAME="env$SUFFIX"
LOCATION="westus"

Далі нам необхідно створити середовище та сам контейнер:

az containerapp env create \ 
  --resource-group $RESOURCE_GROUP_NAME \
  --name $CONTAINER_ENV_NAME \
  --logs-destination none \
  --location $LOCATION
az containerapp create \ 
  --resource-group $RESOURCE_GROUP_NAME \
  --environment $CONTAINER_ENV_NAME \
  --name $API_CONTAINER_NAME \
  --image "mcr.microsoft.com/azure-databases/data-api-builder" \
  --ingress "external" \
  --target-port "5000" \
  --system-assigned

Щоб не дублювати офіційну документацію, детальнішу інструкцію з розгортання Azure Container Apps, налаштування бази, змінних оточень та запуску програми ви можете знайти за посиланням.

Також в інструкції описано, як створити тестову базу даних і як дати доступ до неї:

az sql server create \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $SQL_SERVER_NAME \
  --location $LOCATION \
  --enable-ad-only-auth \
  --external-admin-principal-type "User" \
  --external-admin-name $API_CONTAINER_NAME \
  --external-admin-sid $MANAGED_IDENTITY_PRINCIPAL_ID
az sql server firewall-rule create \
  --resource-group $RESOURCE_GROUP_NAME \
  --server $SQL_SERVER_NAME \
  --name "AllowAzure" \
  --start-ip-address "0.0.0.0" \
  --end-ip-address "0.0.0.0"
az sql db create \
  --resource-group $RESOURCE_GROUP_NAME \
  --server $SQL_SERVER_NAME \
  --name "adventureworks" \
  --sample-name "AdventureWorksLT"

Також для нашого прикладу, нам необхідно зібрати контейнер і додати його в container registry:

FROM mcr.microsoft.com/dotnet/sdk:6.0-cbl-mariner2.0 AS build
WORKDIR /config
RUN dotnet new tool-manifest
RUN dotnet tool install Microsoft.DataApiBuilder
RUN dotnet tool run dab -- init --database-type "mssql" --connection-string "@env('DATABASE_CONNECTION_STRING')"
RUN dotnet tool run dab -- add Product --source "SalesLT.Product" --permissions "anonymous:read"
FROM mcr.microsoft.com/azure-databases/data-api-builder
COPY --from=build /config /App
az acr build \
  --registry $CONTAINER_REGISTRY_NAME \
  --image adventureworkslt-dab:latest \
  --image adventureworkslt-dab:{{.Run.ID}} \
  --file Dockerfile \
  .

Як виглядає збірка контейнера:

Після цього ми можемо зайти на API та вивести продукти з бази даних, яка у нас підключена:

Витративши лише 15 хвилин, ми отримали свій REST API, який можна використати для доступу до даних у базі. Так само використовуючи Azure Container Apps, ми можемо швидко скейлити програму у разі збільшення навантаження.

Установка та налаштування DATA API Builder на локальній машині

Для цього ми звичайно будемо використовувати Docker, і в цій частині ми також звернемо увагу на конфігурування цього сервісу, щоб можна було гнучко налаштувати, які дані ми хочемо віддавати через API. Приступимо.

Для тестової бази даних ми також будемо використовувати докер-контейнер, з SQL 2022,

docker pull mcr.microsoft.com/mssql/server:2022-latest 

Запустимо контейнер з нашим логіном та паролем:

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

Після цього нам необхідно додати тестові дані. Можна використовувати будь-який зручний для вас інструмент і під’єднатися, використовуючи рядок підключення:

Server=localhost,1433;User Id=sa;Password=<your-password>;TrustServerCertificate=true;

Додаємо тестові дані:

IF NOT EXISTS(SELECT name FROM sys.databases WHERE name = 'Library')
BEGIN
    CREATE DATABASE Library;
END
GO
USE Library
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
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

Тепер підготуємо наш конфігураційний файл для DATA API Builder, як бачите, ми дуже просто надали права на читання для anonymous таблиці 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;"
  },
  "entities": {
"book": {
   "source": "dbo.Books",
   "permissions": [
     {
       "actions": [
         "read"
       ],
       "role": "anonymous"
     }
   ]
}
  }
}

Тепер ми готові запускати наш застосунок!

docker pull mcr.microsoft.com/azure-databases/data-api-builder

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

Якщо тепер перейти за адресою localhost:5000/api/book, ми отримаємо список книг:

{
  "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
    },

Висновки

В результаті, ми успішно розглянули перехід від класичного підходу CRUD до використання інструментів, таких як Data API Builder, в хмарному середовищі Azure. Підкреслили переваги цього підходу, зосереджуючись на швидкості розробки, безпеці даних і ефективності масштабування.

Завершальним кроком було випробування можливості запуску нашого застосунку як локально, так і в середовищі Docker. Локальний запуск надає розробникам можливість швидко тестувати та вдосконалювати додаток, тоді як використання Docker дозволяє розгортати застосунок у стандартизованому середовищі, забезпечуючи переносність та масштабованість. Далі ми розглянули створення конфігураційного файлу, який визначає спосіб відображення кінцевих точок REST та GraphQL на фактичні дані. Це крок важливий для забезпечення зручного доступу до даних через створені API.

В цілому, розглянуті аспекти демонструють переваги використання сучасних інструментів і технологій для розробки програмного забезпечення, що дозволяє створювати ефективні, безпечні та масштабовані додатки, як локально, так і в обласному середовищі.

Сподіваюся, це був корисний матеріал для новачків, які хотіли б зайнятися Azure IoT. Також у нас є канал про Azure в телеграм: доєднуйтесь до спільноти.

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному2
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі