Поделиться через


Несколько мутаций в GraphQL для построителя API данных

Построитель API данных (DAB) поддерживает объединение нескольких операций мутации в одну транзакцию. Несколько мутаций поддерживают сценарии, в которых необходимо создать несколько элементов, принадлежащих одной сущности, или создать несколько элементов, принадлежащих связанной сущности. В этом руководстве описывается пример сценария с помощью нескольких операций мутации.

Предпосылки

  • Существующий СЕРВЕР SQL и база данных.
  • CLI инструмента построения API данных. Установка интерфейса командной строки
  • Клиент базы данных (например, SQL Server Management Studio и т. д.)
    • Если у вас нет клиента, установите SQL Server Management Studio.

Создание таблиц

Начните с создания двух базовых таблиц для представления книг и их соответствующих глав. Книги имеют отношение "один ко многим" с соответствующими главами.

  1. Подключитесь к базе данных SQL с помощью предпочтительного клиента или средства.

  2. Создайте таблицу с именем Books с колонками id, title, year и pages.

    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
    
  3. Создайте другую таблицу с именем Chapters, с id, name и pages столбцами. book_id Создайте столбец с внешним ключом связи со id столбцом Books таблицы.

    DROP TABLE IF EXISTS dbo.Chapters;
    
    CREATE TABLE dbo.Chapters
    (
        id int NOT NULL PRIMARY KEY,
        [name] nvarchar(1000) NOT NULL,
        [pages] int null,
        book_id int NOT NULL,
        FOREIGN KEY (book_id) REFERENCES dbo.Books(id)
    )
    GO
    
  4. Убедитесь, что таблицы созданы с помощью некоторых распространенных запросов SQL.

    SELECT * FROM dbo.Books
    
    SELECT * FROM dbo.Chapters
    

    Замечание

    На этом этапе запросы не должны возвращать никакие данные.

Файл конфигурации сборки

Теперь используйте CLI DAB для создания файла конфигурации, сущностей и взаимосвязей сущностей.

  1. Откройте окно терминала.

  2. Сохраните строку подключения к базе данных SQL в качестве переменной оболочки с именем SQL_CONNECTION_STRING.

    SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
    $SQL_CONNECTION_STRING="<your-sql-connection-string>"
    
  3. Запустите dab init , указав следующие свойства.

    Ценность
    database-type mssql
    graphql.multiple-create.enabled true
    host-mode development
    connection-string Используйте переменную оболочки SQL_CONNECTION_STRING , созданную на предыдущем шаге.
    dab init --database-type "mssql" --graphql.multiple-create.enabled true --host-mode "development" --connection-string $SQL_CONNECTION_STRING
    
  4. Выполните команду dab add , чтобы добавить сущность Book , указав следующие свойства.

    Ценность
    source dbo.Books
    permissions anonymous:*
    dab add Book --source "dbo.Books" --permissions "anonymous:*"
    
  5. Запустите dab add еще раз, чтобы добавить сущность "Глава ", указав следующие свойства.

    Ценность
    source dbo.Chapters
    permissions anonymous:*
    dab add Chapter --source "dbo.Chapters" --permissions "anonymous:*"  
    
  6. Выполните команду dab update , чтобы создать связь Book to Chapter , указав следующие свойства.

    Ценность
    relationship chapters
    cardinality many
    dab update Book --relationship chapters --target.entity Chapter --cardinality many
    
  7. Наконец, запустите dab update еще раз, чтобы создать отношение Главы к Книге, указав следующие свойства.

    Ценность
    relationship book
    cardinality one
    dab update Chapter --relationship book --target.entity Book --cardinality one
    

Выполнение нескольких операций мутации создания

Чтобы завершить процесс, используйте CLI DAB для запуска API и проверки конечной точки GraphQL с помощью Banana Cake Pop.

  1. Запустите подсистему среды выполнения с помощью текущей конфигурации.

    dab start
    
  2. Перейдите к относительной конечной точке /graphql для работающего приложения. Эта точка доступа открывает интерфейс Banana Cake Pop.

    Замечание

    По умолчанию эта конечная точка будет https://localhost:5001/graphql.

  3. Создайте мутацию GraphQL, чтобы создать три отдельные строки в двух таблицах в базе данных. Эта мутация использует сущности Book и Chapter в одной операции "множественное создание". Используйте следующие свойства для мутации.

    Тип сущности Идентификатор Имя Страницы Год
    Книга 1 Общие сведения о построителе API данных 200 2024
    Глава 2 Файлы конфигурации сто пятьдесят
    Глава 3 Бег 50
    mutation {
      createBook(
        item: {
          id: 1
          title: "Introduction to Data API builder"
          pages: 200
          year: 2024
          chapters: [
            {
                id: 2
                name: "Configuration files", pages: 150 
            }
            {
                id: 3
                name: "Running", pages: 50
            }
          ]
        }
      ) {
        id
        title
        pages
        year
        chapters {
          items {
            name
            pages
          }
        }
      }
    }
    
  4. Просмотрите выходные данные из мутации. Мутация создала связанные данные для обоих типов сущностей.

    {
      "data": {
        "createBook": {
          "id": 1,
          "title": "Introduction to Data API builder",
          "pages": 200,
          "year": 2024,
          "chapters": {
            "items": [
              {
                "name": "Configuration files",
                "pages": 150
              },
              {
                "name": "Running",
                "pages": 50
              }
            ]
          }
        }
      }
    }
    
  5. Используйте запрос GraphQL для получения всех книг в базе данных, включая связанные с ними главы.

    query {
      books {
        items {
          pages
          title
          year
          chapters {
            items {
              name
              pages
            }
          }
        }
      }
    }
    

    Замечание

    На этом этапе запрос должен вернуть одну книгу с двумя главами.

  6. Просмотрите выходные данные этого запроса с массивом книг, включая вложенный массив глав.

    {
      "data": {
        "books": {
          "items": [
            {
              "pages": 200,
              "title": "Introduction to Data API builder",
              "year": 2024,
              "chapters": {
                "items": [
                  {
                    "name": "Configuration files",
                    "pages": 150
                  },
                  {
                    "name": "Running",
                    "pages": 50
                  }
                ]
              }
            }
          ]
        }
      }
    }
    
  7. Снова подключитесь к базе данных SQL с помощью предпочтительного клиента или средства.

  8. Убедитесь, что данные были успешно созданы с помощью SQL-запроса.

    SELECT 
        c.name AS chapterName,
        c.pages AS chapterPages,
        b.title AS bookName,
        b.year AS releaseYear
    FROM dbo.Chapters c
    LEFT JOIN dbo.Books b ON b.id = c.book_id
    

    Замечание

    Этот запрос должен возвращать две записи раздела.