你有两个选择。
1.接口
如果editOptions
可能因类型而异,但对于该特定类型是一致的,则可以使用接口(node.js 示例)。
假设您有两个对象,一个盒子和一个球体。您可以定义一个同时实现的对象接口:
interface Object
type Box implements Object {
editOptions: BoxOptions
}
type BoxOptions {
boxes: Int,
size: ...,
color: ...
}
type Sphere implements Object {
editOptions: SphereOptions
}
type SphereOptions {
spheres: Int,
...
}
type Query {
objects: [Object]
}
在您的查询中,您将返回一个Object
, 以及基于每种类型的请求选项:
query Query {
objects(filter: "...") {
... on Box {
editOptions {
boxes
size
}
}
... on Sphere {
editOptions {
spheres
}
}
}
}
在返回的 JSON 中,框将具有boxes
和size
下的字段editOptions
,而球体将具有spheres
。
有时没有颜色是有用的
如果某些框没有颜色,则该字段将为空(但仍存在于架构中)。
2.JSON
如果editOptions
真的是可变的,您可以将字段定义为字符串,并通过序列化的 JSON 发送。您将丢失所有类型验证,但每个对象的结构可以是完全任意的。只要确保您的客户了解如何处理它。