配置 Schema
配置 Schema查询 'self' 字段

查询 'self' 字段

有时我们需要修改响应的结构,以模拟另一个 GraphQL 服务器或 REST API 的响应。

我们可以通过 self 字段来实现这一点。该字段被添加到 GraphQL schema 的所有类型中,它会将应用的对象本身原样返回:

type QueryRoot {
  self: QueryRoot!
}
 
type Post {
  self: Post!
}
 
type User {
  self: User!
}

工作原理

self 字段允许在不离开当前查询对象的情况下,向查询添加额外的层级。运行以下查询:

{
  __typename
  self {
    __typename
  }
  
  post(by: {id: 1}) {
    self {
      id
      __typename
    }
  }
  
  user(by: {id: 1}) {
    self {
      id
      __typename
    }
  }
}

...会产生如下响应:

{
  "data": {
    "__typename": "QueryRoot",
    "self": {
      "__typename": "QueryRoot"
    },
    "post": {
      "self": {
        "id": 1,
        "__typename": "Post"
      }
    },
    "user": {
      "self": {
        "id": 1,
        "__typename": "User"
      }
    }
  }
}

使用方法

使用 self 人为地添加响应所需的额外层级,并使用字段别名为这些层级设置合适的名称。

例如,以下查询重现了另一个 GraphQL 服务器的结构:

{
  categories: self {
    edges: postCategories {
      node: self {
        name
        slug
      }
    }
  }
}

以下查询重现了 WP REST API 的结构:

{
  post(by: {id: 1}) {
    content: self {
      rendered: content
    }
  }
}

向端点添加 self 字段

向 schema 添加 self 字段可按如下方式配置,按优先级从高到低排列:

✅ 在 schema 配置中定义的自定义端点或 persisted query 的特定模式

Adding self fields to the schema, set in the Schema configuration

✅ 在设置中定义的默认模式

如果 schema 配置的值为 "Default",将使用设置中定义的模式:

在设置中配置 schema 配置的 self 字段
在设置中配置 schema 配置的 self 字段

使用时机

self 字段可用于将 GraphQL 响应的结构调整为某种特定的所需结构,例如另一个 GraphQL 服务器或 REST API 的结构。