У меня есть следующие конечные точки REST:
/ заказы / {ID}
returns {
orderId,
orderItem,
customerId
}
/ клиентов / {ID}
returns {
customerId,
firstName,
lastName
}
Я ограничен этими двумя конечными точками, которые будут обернуты в моей схеме graphql.
Я хотел бы следующую схему:
type Order {
orderId: ID!,
orderItem: String,
customer: Customer
}
type Customer{
customerId: ID!
firstName: String!
lastName: String!
}
type Query {
getOrder(id: String!): Order,
getCustomer(id: String!): Customer
}
Мне интересно, возможно ли, чтобы GraphQL разрешил объект Customer в типе Order? Я понимаю, что вы не можете передать результат запроса в параметр другого.
Я считаю, что решатель getOrder
будет:
const getOrderResolver = axios.get(`/orders/${id}`)
.then((ordersRes) => {
let customerId;
if(ordersRes.data.customerId !== null) {
customerId = ordersRes.data.customerId
axios.get(`/customers/${customerId}`)
.then((customerRes) => ({
return {
orderId: ordersRes.data.orderId
orderItem: ordersRes.data.orderItem
customer: {
customerId: customerRes.data.customerId
firstName: customerRes.data.firstName
lastName: customerRes.data.lastName
}
}
})
} else {
return {
orderId: ordersRes.data.orderId
orderItem: ordersRes.data.orderItem
customer: null
}
}
})
})
getCustomer
resolver
const getCustomerResolver = axios.get(`/customers/${customerId}`)
.then((customerRes) => ({
return {
customerId: customerRes.data.customerId
firstName: customerRes.data.firstName
lastName: customerRes.data.lastName
}
})
Похоже, с моим решением будет дополнительная плата за выборку типа Customer
независимо от того, запрашивается он или нет в запросе getOrder
. Можно ли переписать мою схему GraphQL таким образом, чтобы GraphQL мог разрешить тип Customer
только при запросе?
Ограничение моего данного ORDERS
REST API возвращает только CustomerId
, затрудняет разрешение в getOrder
, поскольку для Customer
API требуется customerId