跳转到内容

GraphQL API 概述

Archie Core 中的每个项目都使用统一的 API 端点。这个单一端点处理每个数据表的 GraphQL 查询、变更和订阅。API 预配置了过滤、分页、全文搜索和其他高级功能。

所有 API 请求都发送到以下 URL:

https://archie-core.services.archie.com/graphql

要将请求路由到您的特定项目,必须在每个 HTTP 请求中包含包含项目 ID 的 x-project-id 标头。

alt text

GraphQL 是用于请求对象上字段的规范。这是一个简单的 Archie Core 查询,它通过唯一的 id 查找特定城市,并请求返回 nameCitystate 字段。

query MyQuery {
citiesById(id: "e14638cb-6d72-4a36-b30f-9b763136a7bb") {
id
nameCity
state
}
}

结果如下:

{
"data": {
"citiesById": {
"id": "e14638cb-6d72-4a36-b30f-9b763136a7bb",
"nameCity": "Chicago",
"state": "Illinois"
}
}
}

结果与查询具有相同的形状。这是 GraphQL 的关键:您总是得到您请求的内容,服务器知道客户端正在请求哪些字段。

Archie Core GraphQL 查询是交互式的,并且原生支持关系查询。这意味着两件重要的事情:

  1. 查询可以随时更改。
  2. 可以在不编写复杂的数据库查询和序列化器的情况下连接相关数据。

Archie Core GraphQL API 的强大功能通过在执行查询时指定不同参数的能力得到进一步增强。这在上面的示例中已经演示,其中特定的 UUID 字符串作为参数传递给查询(...citiesById(id: "e14638cb..."))。

Data Builder 中创建数据表时,任何标记为唯一的字段都可以用作查询的参数。

例如,由于 Cities 表的 ID 字段设置为唯一(因为它是主键),我们可以查询特定的 City 记录:

query MyQuery {
citiesById(id: "e14638cb-6d72-4a36-b30f-9b763136a7bb") {
id
nameCity
state
}
}

您可以使用 API Explorer 中的变量使查询可重用和动态。

要使用变量,您需要:

  1. 将查询中的静态值替换为 $variableName。
  2. 将 $variableName 声明为查询接受的变量之一。
  3. 在单独的变量字典中传递 variableName: value。

这是查询:

query MyQuery ($filter: StudentsFilter) {
students(filter: $filter) {
items {
firstName
email
}
}
}

这是变量:

{
"filter": {
"isActive": {
"equals": true
}
}
}

这是结果:

{
"data": {
"students": {
"items": [
{
"firstName": "James",
"email": "james.smith@example.com"
},
{
"firstName": "John",
"email": "john.williams@example.com"
},
{
"firstName": "Mary",
"email": "mary.brown@example.com"
},
{
"firstName": "Mary",
"email": "mary.johnson@example.com"
},
{
"firstName": "Elizabeth",
"email": "elizabeth.davis@example.com"
}
]
}
}
}

alt text

别名用于返回具有与其字段名称不同的名称的对象。当在单个查询中获取具有不同参数的相同类型的对象时,这是必需的。

下面您可以看到第一个城市的别名为 “cityOne”:

query MyQuery {
cityOne: citiesById(id: "e14638cb-6d72-4a36-b30f-9b763136a7bb") {
id
nameCity
}
cityTwo: citiesById(id: "0174dc55-d494-4ebc-a0e9-13575461cad4") {
id
nameCity
}
}

结果:

{
"data": {
"cityOne": {
"id": "e14638cb-6d72-4a36-b30f-9b763136a7bb",
"nameCity": "Chicago"
},
"cityTwo": {
"id": "0174dc55-d494-4ebc-a0e9-13575461cad4",
"nameCity": "Miami"
}
}
}

查询可能变得冗长而复杂。片段创建一组字段,可用于表示定义的集合。如果您想要来自两个不同作者的多个字段,可以使用片段,而不是重复字段两次。在此查询中,我们有一个名为 { ...studentFrag } 的片段:

query MyQuery {
studentA: studentsById(id: "287cff0a-345b-4cca-9e9a-75a2161238fd") { ...studentFrag}
studentB: studentsById(id: "97fb89ac-e0ad-44f5-b671-24a1b751287c") { ...studentFrag}
}
fragment studentFrag on Students {
id
firstName
email
isActive
city {
nameCity
state
}
}

结果:

{
"data": {
"studentA": {
"id": "287cff0a-345b-4cca-9e9a-75a2161238fd",
"firstName": "James",
"email": "james.smith@example.com",
"isActive": true,
"city": {
"nameCity": "Chicago",
"state": "Illinois"
}
},
"studentB": {
"id": "97fb89ac-e0ad-44f5-b671-24a1b751287c",
"firstName": "John",
"email": "john.williams@example.com",
"isActive": true,
"city": {
"nameCity": "Seattle",
"state": "Washington"
}