[英]GraphQL query omitting null fields for different type objects
我正在使用 Apollo Graphql 來獲取不同型號或類型的列表。 我嘗試使用 inhirit,但我沒有得到它。 我試圖使用整個 object,但我想省略我不需要的字段。
我使用可為空字段創建架構類型,因為並非所有對象都具有所有字段。
我將通過下一個示例更好地解釋:
這是一個簡單的示例 class (OBJECT) 設計:
car {
name: String
wheelNumber: Integer
}
trunk extends car {
cargoSize: Integer
}
所以我用這種方式創建了我的 Graphql Schema:
input vehicleInput {
name: String,
wheelNumber: Integer,
cargoSize: Integer
}
type vehicle {
name: String,
wheelNumber: Integer,
cargoSize: Integer
}
type Query {
vehicles: [vehicle]
}
type Mutation {
addVehicle(input: vehicleInput ): vehicle!
}
解析器示例:
import { vehicle } from "./model";
export const resolvers = {
Query: {
vehicles : () => {
return vehicle.find({});
},
},
Mutation: {
addVehicle: (_, { input }) => {
const inputResponse = vehicle.create(input);
return inputResponse;
},
}
};
當我執行車輛查詢時,如果 object 沒有 cargoSize 字段,它也會返回所有字段,它會返回cargoSize: null
。
query {
vehicles {
name
wheelNumber
cargoSize
}
}
當它是 null 時,我想省略 cargoSize 字段。 像這樣:
{
vehicles: [
{
name: "car 1",
wheelNumber: 4
},
{
name: "car 2",
wheelNumber: 4
},
{
name: "truck 1",
wheelNumber: 8,
cargoSize: 65
},
{
name: "car 3",
wheelNumber: 4
},
]
}
而不是這個:
{
vehicles: [
{
name: "car 1",
wheelNumber: 4,
cargoSize: null
},
{
name: "car 2",
wheelNumber: 4,
cargoSize: null
},
{
name: "truck 1",
wheelNumber: 8,
cargoSize: 65
},
{
name: "car 3",
wheelNumber: 4,
cargoSize: null
},
]
}
有什么辦法嗎? 我一直在研究,但我沒有找到任何關於它的信息。
我知道了。 我沒有看到 Graphql 有接口。 很好,我聲明了一個接口,然后我實現了每種類型。
interface vehicle {
name: String,
wheelNumber: Integer
}
type car implements vehicle {
name: String,
wheelNumber: Integer
}
type truck implements vehicle {
name: String,
wheelNumber: Integer,
cargoSize: Integer
}
type Query {
vehicles: [vehicle]
}
type Mutation {
addVehicle(input: vehicleInput ): vehicle!
}
解析器文件:
import { vehicle } from "./model";
export const resolvers = {
Query: {
vehicles : () => {
return vehicle.find({});
},
},
Mutation: {
addVehicle: (_, { input }) => {
const inputResponse = vehicle.create(input);
return inputResponse;
},
},
vehicle: {
__resolveType: (obj) => {
if(obj.cargoSize){
return 'truck';
}
else{
return 'car'
}
}
};
這樣我就完成了 API。 然后為了進行查詢,我只需要指定所有公共字段,然后使用關鍵字... on
並指定所有主干字段:
query {
vehicles {
name
wheelNumber
... on truck {
cargoSize
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.