Fabric API for GraphQL 提供图形化的浏览器内 GraphQL 开发环境,它提供了一个交互式场所供你编写、测试 GraphQL 查询和突变以及查看它们的实时结果。
谁使用 GraphQL 编辑器
GraphQL 编辑器是必不可少的:
- 应用程序开发人员 在将查询实现到应用程序之前,会对 Fabric 数据进行原型设计和查询测试
- 数据工程师 探索 Lakehouse 和仓库数据结构以及验证 GraphQL 架构设计
- Fabric 工作区贡献者 测试数据访问权限并排查查询问题
- BI 开发人员 学习 API 结构并为自定义应用程序创建数据访问模式
- 开发团队 协作进行查询开发并在 Fabric 工作区中诊断数据访问问题
每当需要针对 Fabric 数据源以交互方式开发、测试或调试 GraphQL 查询时,请使用编辑器。
GraphQL 编辑器入门
按照以下步骤开始使用 GraphQL 编辑器:
打开 GraphQL API 项 - 导航到 Fabric 中的工作区并打开 GraphQL 项的 API。
访问编辑器 - 在门户屏幕左下角选择 “查询 ”。
编写查询 - 直接在 “查询 ”选项卡上键入 GraphQL 查询。通过键盘快捷方式使用 Intellisense:
- Windows:Ctrl + 空格
- macOS:命令 + 空间
执行查询 - 选择 “运行” 以执行查询并从数据源检索数据。
生成代码
API 编辑器自动生成样本 Python 或 Node.js 代码,该代码反映当前在编辑器中测试的 GraphQL 查询或突变。 在对查询进行原型制作和优化时,生成的代码会相应地更新。 对结果感到满意后,可以查看并复制生成的代码以在本地运行以进行测试,或在应用程序开发过程中重复使用它。
重要
生成的代码将使用交互式浏览器凭据,且应仅用于测试目的。 在生产环境中,请务必在 Microsoft Entra 中注册应用程序,并使用相应的 client_id 和范围。 可以在连接应用程序中找到包含示例代码的端到端示例。
开始之前:
编写查询 - 在查询编辑器中输入以下示例查询(或你自己的查询):
query { addresses(first: 5) { items { AddressID City StateProvince CountryRegion } } }运行查询 - 选择 “运行 ”以执行查询,并在继续作之前验证它在编辑器中正常工作。
生成代码 - 选择“ 生成代码 ”按钮,然后选择首选编程语言(Python 或 JavaScript/Node.JS):
然后,可以复制生成的代码并将其另存为本地文件夹中的文件。 根据所选语言,按照以下快速步骤在本地测试:
Python
从上面的示例查询创建一个名为
editor.py并粘贴生成的代码的文件。通过运行命令
python -m venv .venv创建虚拟环境。venv通过运行.venv\Scripts\activate或source .venv/bin/activate.通过运行
pip install azure-identity来安装所需的依赖项。使用
python editor.py. 执行代码。系统会提示你通过浏览器窗口登录以对请求进行身份验证。
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
从上面的示例查询创建一个名为
editor.js并粘贴生成的代码的文件。在与
editor.js相同的文件夹中,创建一个package.json文件,内容如下:{ "type": "module", "dependencies": {} }在开发计算机上安装 Node.js (包括 npm)
在所选的包管理器中运行
npm install @azure/identity或类似的命令,以安装最新版本的标识库。运行
node editor.js以执行代码。系统会提示你通过浏览器窗口登录以对请求进行身份验证。
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"
}
变量使突变代码更简洁、更易于读取、测试和修改。 它们还使得只需更改变量,即可使用不同值重复使用相同的突变。