Fabric API for GraphQL 编辑器

Fabric API for GraphQL 提供图形化的浏览器内 GraphQL 开发环境,它提供了一个交互式场所供你编写、测试 GraphQL 查询和突变以及查看它们的实时结果。

谁使用 GraphQL 编辑器

GraphQL 编辑器是必不可少的:

  • 应用程序开发人员 在将查询实现到应用程序之前,会对 Fabric 数据进行原型设计和查询测试
  • 数据工程师 探索 Lakehouse 和仓库数据结构以及验证 GraphQL 架构设计
  • Fabric 工作区贡献者 测试数据访问权限并排查查询问题
  • BI 开发人员 学习 API 结构并为自定义应用程序创建数据访问模式
  • 开发团队 协作进行查询开发并在 Fabric 工作区中诊断数据访问问题

每当需要针对 Fabric 数据源以交互方式开发、测试或调试 GraphQL 查询时,请使用编辑器。

GraphQL 编辑器入门

按照以下步骤开始使用 GraphQL 编辑器:

  1. 打开 GraphQL API 项 - 导航到 Fabric 中的工作区并打开 GraphQL 项的 API。

  2. 访问编辑器 - 在门户屏幕左下角选择 “查询 ”。

    显示“查询”选项显示在 Fabric 屏幕左下角的位置的屏幕截图。

  3. 编写查询 - 直接在 “查询 ”选项卡上键入 GraphQL 查询。通过键盘快捷方式使用 Intellisense:

    • Windows:Ctrl + 空格
    • macOS:命令 + 空间

    API 编辑器屏幕的屏幕截图,其中显示了“查询”选项卡划分为“运行”、“查询变量”和“结果”窗格。

  4. 执行查询 - 选择 “运行” 以执行查询并从数据源检索数据。

生成代码

API 编辑器自动生成样本 Python 或 Node.js 代码,该代码反映当前在编辑器中测试的 GraphQL 查询或突变。 在对查询进行原型制作和优化时,生成的代码会相应地更新。 对结果感到满意后,可以查看并复制生成的代码以在本地运行以进行测试,或在应用程序开发过程中重复使用它。

重要

生成的代码将使用交互式浏览器凭据,且应仅用于测试目的。 在生产环境中,请务必在 Microsoft Entra 中注册应用程序,并使用相应的 client_id 和范围。 可以在连接应用程序中找到包含示例代码的端到端示例。

开始之前:

  1. 编写查询 - 在查询编辑器中输入以下示例查询(或你自己的查询):

    query {
      addresses(first: 5) {
         items {
            AddressID
            City
            StateProvince
            CountryRegion
         }  
      }
    }
    
  2. 运行查询 - 选择 “运行 ”以执行查询,并在继续作之前验证它在编辑器中正常工作。

  3. 生成代码 - 选择“ 生成代码 ”按钮,然后选择首选编程语言(PythonJavaScript/Node.JS):

    API 编辑器屏幕的屏幕截图,其中显示了下拉列表,用于选择生成的代码的编程语言。

  4. 然后,可以复制生成的代码并将其另存为本地文件夹中的文件。 根据所选语言,按照以下快速步骤在本地测试:

Python

  1. 从上面的示例查询创建一个名为 editor.py 并粘贴生成的代码的文件。

  2. 通过运行命令 python -m venv .venv创建虚拟环境。

  3. venv通过运行.venv\Scripts\activatesource .venv/bin/activate.

  4. 通过运行 pip install azure-identity来安装所需的依赖项。

  5. 使用 python editor.py. 执行代码。

  6. 系统会提示你通过浏览器窗口登录以对请求进行身份验证。

  7. API 的响应在控制台中打印。

    {
    	"data": {
    		"addresses": {
    			"items": [
    				{
    					"AddressID": 9,
    					"City": "Bothell",
    					"StateProvince": "Washington",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 11,
    					"City": "Bothell",
    					"StateProvince": "Washington",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 25,
    					"City": "Dallas",
    					"StateProvince": "Texas",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 28,
    					"City": "Phoenix",
    					"StateProvince": "Arizona",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 32,
    					"City": "Montreal",
    					"StateProvince": "Quebec",
    					"CountryRegion": "Canada"
    				}
    			]
    		}
    	}
    }
    

Node.JS

  1. 从上面的示例查询创建一个名为 editor.js 并粘贴生成的代码的文件。

  2. 在与editor.js相同的文件夹中,创建一个package.json文件,内容如下:

    {
      "type": "module",
      "dependencies": {}
    }
    
  3. 在开发计算机上安装 Node.js (包括 npm)

  4. 在所选的包管理器中运行 npm install @azure/identity 或类似的命令,以安装最新版本的标识库。

  5. 运行 node editor.js 以执行代码。

  6. 系统会提示你通过浏览器窗口登录以对请求进行身份验证。

  7. API 的响应在控制台中打印。

    {
    	"data": {
    		"addresses": {
    			"items": [
    				{
    					"AddressID": 9,
    					"City": "Bothell",
    					"StateProvince": "Washington",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 11,
    					"City": "Bothell",
    					"StateProvince": "Washington",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 25,
    					"City": "Dallas",
    					"StateProvince": "Texas",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 28,
    					"City": "Phoenix",
    					"StateProvince": "Arizona",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 32,
    					"City": "Montreal",
    					"StateProvince": "Quebec",
    					"CountryRegion": "Canada"
    				}
    			]
    		}
    	}
    }
    

查询和突变的开发

以下示例演示了使用 AdventureWorks 示例数据的 GraphQL 查询和突变语法。 这些示例假设你正在使用一个支持写入操作(修改)的 Fabric 数据仓库。 通过 SQL Analytics 终结点(如 Lakehouses 和镜像数据库)访问的数据源是只读的,仅支持查询,不支持突变。

查看 AdventureWorks 中的此简短 GraphQL 架构摘录。 它定义一个 Product 类型,其中包含用于读取单个产品或列出所有产品的查询,以及用于创建、更新或删除产品的突变,支持所有 CRUDL(创建、读取、更新、删除、列出)用例。

{
  type Product {
    ProductID: Int!
    Name: String!
    ProductNumber: String!
    Color: String
    ListPrice: Float!
    SellStartDate: DateTime!
  }

  type Query {
    products(first: Int, filter: ProductFilterInput): ProductConnection
    products_by_pk(ProductID: Int!): Product
  }

  type Mutation {
    createProduct(Name: String!, ProductNumber: String!, ListPrice: Float!, SellStartDate: DateTime!): Product
    updateProduct(ProductID: Int!, Name: String, Color: String, ListPrice: Float): Product
    deleteProduct(ProductID: Int!): Boolean
  }
}

使用架构中定义的任何查询读取通过 GraphQL 公开的数据。 查询 products_by_pk 按其主键检索单个产品:

query MyQuery {
  products_by_pk(ProductID: 680) {
    ProductID
    Name
    ProductNumber
    Color
    ListPrice
  }
}

响应:

{
  "data": {
    "products_by_pk": {
      "ProductID": 680,
      "Name": "HL Road Frame - Black, 58",
      "ProductNumber": "FR-R92B-58",
      "Color": "Black",
      "ListPrice": 1431.50
    }
  }
}

使用变更,例如 createProduct 来写入数据,并基于所需的参数创建新产品。

mutation MyMutation {
  createProduct(
    Name: "Mountain Bike Helmet - Blue", 
    ProductNumber: "HE-M897-B", 
    ListPrice: 89.99,
    SellStartDate: "2025-01-01T00:00:00Z"
  ) {
    ProductID
    Name
    ProductNumber
    ListPrice
  }
}

响应:

{
  "data": {
    "createProduct": {
      "ProductID": 1001,
      "Name": "Mountain Bike Helmet - Blue",
      "ProductNumber": "HE-M897-B",
      "ListPrice": 89.99
    }
  }
}

查询变量

使用“查询”选项卡右侧的“查询变量”窗格将参数作为变量传递给查询或突变。 变量与其他编程语言中的变量一样工作。 每个变量都声明有一个用于访问存储在其中的值的名称。 使用前面的突变示例可以稍微修改它以使用查询变量。

mutation MyMutation ($name: String!, $productNumber: String!, $listPrice: Float!, $sellStartDate: DateTime!){
  createProduct(
    Name: $name, 
    ProductNumber: $productNumber, 
    ListPrice: $listPrice,
    SellStartDate: $sellStartDate
  ) {
    ProductID
    Name
    ProductNumber
    ListPrice
  }
}

使用以下示例在 “查询变量 ”窗格中定义变量。

{
  "name": "Mountain Bike Helmet - Blue",
  "productNumber": "HE-M897-B",
  "listPrice": 89.99,
  "sellStartDate": "2025-01-01T00:00:00Z"
}

变量使突变代码更简洁、更易于读取、测试和修改。 它们还使得只需更改变量,即可使用不同值重复使用相同的突变。