次の方法で共有


クイック スタート: SQL でデータ API ビルダーを使用する

このクイック スタートでは、データ API ビルダー (DAB) を使用して、ローカル SQL データベースの REST エンドポイントと GraphQL エンドポイントを作成します。 使用を開始するには、データベース エンジンを選択します。

前提条件

Data API Builder CLI をインストールする

NuGet から Microsoft.DataApiBuilder パッケージを .NET ツールとしてインストールします。

  1. dotnet tool installを使用して、Microsoft.DataApiBuilder引数を使用して最新バージョンの--globalをインストールします。

    dotnet tool install --global Microsoft.DataApiBuilder
    

    パッケージが既にインストールされている場合は、代わりに dotnet tool update を使用してパッケージを更新します。

    dotnet tool update --global Microsoft.DataApiBuilder
    
  2. dotnet tool list引数を使用して、ツールが--globalと共にインストールされていることを確認します。

    dotnet tool list --global
    

データベース イメージをプルする

ヒント

データベースは既に存在しますか?データベースの作成とシード処理」に進み、エンジンの SQL スクリプトを実行してから、「独自の接続文字列を使用して データ API ビルダーを構成する」 に進みます。

データベース エンジンの Docker イメージをダウンロードします。 この手順は、接続速度によっては数分かかる場合があります。

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

データベースを起動する

Docker でローカル データベース インスタンスを実行します。

docker run --name dab-mssql --env "ACCEPT_EULA=Y" --env "MSSQL_SA_PASSWORD=P@ssw0rd1" --publish 1433:1433 --detach mcr.microsoft.com/mssql/server:2025-latest

ヒント

ポート 1433 が既に使用されている場合 (ローカル SQL Server のインストールなど)、 --publish1434:1433 などの別のホスト ポートに変更し、 Server=localhost,1433 を後の手順で Server=localhost,1434 するように更新します。

次のコマンドを実行する前に、データベース エンジンの準備ができているかどうかを確認します。

docker exec dab-mssql /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "P@ssw0rd1" -C -Q "SELECT 1"

エラーが返された場合は、数秒待ってからやり直してください。

データベースを作成してシード処理する

todosデータベースとテーブルを作成し、サンプル データを追加します。 Docker を使用している場合は、SQL クライアントは必要ありません。docker exec コンテナー内でコマンドを直接実行します。 独自のデータベースを使用している場合は、任意のツールで SQL スクリプトを実行します。

  1. データベースを作成します。

    docker exec dab-mssql /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "P@ssw0rd1" -C -Q "CREATE DATABASE todos;"
    
  2. テーブルを作成し、サンプル データを追加します。

    docker exec dab-mssql /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "P@ssw0rd1" -C -d todos -Q "CREATE TABLE dbo.todos (id int PRIMARY KEY, title nvarchar(100) NOT NULL, completed bit NOT NULL DEFAULT 0); INSERT INTO dbo.todos VALUES (1, 'Walk the dog', 0), (2, 'Feed the fish', 0), (3, 'Comb the cat', 1);"
    

ヒント

独自の SQL Server を使用していますか? このスクリプトを直接実行します。

CREATE DATABASE todos;
GO
USE todos;
GO
CREATE TABLE dbo.todos (id int PRIMARY KEY, title nvarchar(100) NOT NULL, completed bit NOT NULL DEFAULT 0);
INSERT INTO dbo.todos VALUES (1, 'Walk the dog', 0), (2, 'Feed the fish', 0), (3, 'Comb the cat', 1);

データ API ビルダーの構成

DAB 構成ファイルを作成し、 Todo エンティティを追加します。

ヒント

独自のデータベースを使用していますか? dab initの接続文字列を独自の接続文字列に置き換えます。

  • SQL Server:Server=<host>,<port>;Database=todos;User Id=<user>;Password=<password>;TrustServerCertificate=true;Encrypt=true;
  • Postgresql:Host=<host>;Port=5432;Database=todos;User ID=<user>;Password=<password>;
  • Mysql:Server=<host>;Port=3306;Database=todos;User=<user>;Password=<password>;
  1. 構成を初期化します。

    dab init --database-type "mssql" --host-mode "Development" --connection-string "Server=localhost,1433;Database=todos;User Id=sa;Password=P@ssw0rd1;TrustServerCertificate=true;Encrypt=true;"
    
  2. Todo エンティティを追加します。

    dab add Todo --source "dbo.todos" --permissions "anonymous:*"
    

これで、 dab-config.json ファイルは次の例のようになります。

{
  "$schema": "https://github.com/Azure/data-api-builder/releases/download/vmajor.minor.patch/dab.draft.schema.json",
  "data-source": {
    "database-type": "mssql",
    "connection-string": "Server=localhost,1433;Database=todos;User Id=sa;Password=P@ssw0rd1;TrustServerCertificate=true;Encrypt=true;"
  },
  "runtime": {
    "rest": {
      "enabled": true
    },
    "graphql": {
      "enabled": true
    },
    "host": {
      "mode": "development",
      "cors": {
        "origins": ["*"]
      }
    }
  },
  "entities": {
    "Todo": {
      "source": "dbo.todos",
      "permissions": [
        {
          "role": "anonymous",
          "actions": [
            "*"
          ]
        }
      ]
    }
  }
}

ヒント

dab initコマンドとdab addコマンドをスキップし、次に示す内容でdab-config.json ファイルを直接作成できます。

API を起動する

dab startを使用してツールを実行し、エンティティの API エンドポイントを作成します。

dab start

出力には、実行中の API のアドレスが含まれている必要があります。

      Successfully completed runtime initialization.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: <http://localhost:5000>

ヒント

この例では、アプリケーションはポート localhostで実行されています。 実行中のアプリケーションのアドレスとポートが異なる場合があります。

API のテスト

  1. ブラウザーを開き、 Todo エンティティの REST エンドポイントに移動します。

    http://localhost:5000/api/Todo
    
  2. JSON 応答には、3 つの todo 項目がすべて含まれている必要があります。

    {
      "value": [
        { "id": 1, "title": "Walk the dog", "completed": false },
        { "id": 2, "title": "Feed the fish", "completed": false },
        { "id": 3, "title": "Comb the cat", "completed": true }
      ]
    }
    
  3. /swaggerの Swagger ドキュメント ページに移動します。

    http://localhost:5000/swagger
    

Web アプリを構築する

プレーンな HTML ファイルを使用して、ブラウザーに todos を表示します。 REST エンドポイントまたは GraphQL エンドポイントを使用して、 todo.html という名前のファイルを作成します。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Todo App</title>
  <style>
    body { font-family: sans-serif; max-width: 400px; margin: 2rem auto; }
    li.done { text-decoration: line-through; color: gray; }
    #error { color: red; }
  </style>
</head>
<body>
  <h1>Todos</h1>
  <ul id="list"></ul>
  <p id="error"></p>
  <script>
    fetch('http://localhost:5000/api/Todo')
      .then(r => r.json())
      .then(data => {
        const ul = document.getElementById('list');
        data.value.forEach(todo => {
          const li = document.createElement('li');
          li.textContent = todo.title;
          if (todo.completed) li.className = 'done';
          ul.appendChild(li);
        });
      })
      .catch(() => {
        document.getElementById('error').textContent =
          'Could not reach the API. Make sure DAB is running on http://localhost:5000.';
      });
  </script>
</body>
</html>

ブラウザーで todo.html を開きます。 このページは、すべてのtodo項目を取得し、完了した項目を取り消し線で表示してリストとしてレンダリングします。

Important

構成の cors 設定を使用すると、この HTML ファイルをローカル ファイル システムから開き、API を呼び出すことができます。 これを行わないと、ブラウザーは要求をブロックします。

クリーンアップ

完了したら、Docker コンテナーを停止して削除します。

docker stop dab-mssql && docker rm dab-mssql

次のステップ