【发布时间】:2019-02-05 15:02:27
【问题描述】:
我正在使用 API 后端从头开始构建 GraphQL 服务器,以替换 REST API 服务器。目前,现有 API 服务器中的一些请求,主要是在 GraphQL 中将发生突变的 Create / Update 请求,包括客户端使用的请求 id。此请求 ID 是关于请求本身的元数据,而不是域资源的一部分。
我的问题是如何在 GraphQL 查询和突变中建模/包含请求元数据?到目前为止,我唯一的解决方案是创建一个请求类型,其他类型可以作为字段包含在内,因此请求数据可以包含在突变返回类型中。但是我不喜欢这种方法,因为它将请求数据混合到我的域类型中,这非常违背 GraphQL 的精神。是否有一种可接受的方式来传递“任意”,例如GraphQL 中的查询或突变响应中的非域类型数据?
示例 - 我想避免的:
type UserType {
id: ID
name: String
request: RequestType // mixing request data in with domain type of User
}
type RequestType {
id: ID
}
更新
对于其他对此问题感兴趣的人,根据此处的响应,我认为 GraphQL extensions 键是向 GraphQL 响应添加任意数据而不使数据成为数据图的一部分的好选择。在 Express-GraphQL 中,可以在此处找到有关向响应添加扩展键的文档:https://github.com/graphql/express-graphql#providing-extensions。这里有一个很好的扩展概述:https://marmelab.com/blog/2017/09/06/dive-into-graphql-part-iii-building-a-graphql-server-with-nodejs.html#server-logging
也就是说,如果请求元数据在概念上是域数据的一部分,那么按照下面 Kashif 的建议创建嵌入域类型的 ResponseType 可能是正确的方法。
【问题讨论】: