Я не знал, как озаглавить этот вопрос, но вот в чем я не уверен.
У меня есть интерфейс React, который выполняет запрос GraphQl к нашему промежуточному слою GraphQl, который объединяет данные, делая вызовы к нашему legacy REST api.
Так, например, в React я могу вызвать запрос getCustomer
:
query getCustomer($id: Int!) {
getCustomer(id: $id) {
name
email
}
}
, который попадет на распознаватель getCustomer
, который затем отправит запрос нашему REST customers/{id}
конечная точка для возврата наших данных.
async function getCustomer(_, { id }, ctx) {
const customer = await ctx.models.customer.getCustomer(id);
return customer;
}
Этот запрос подходит, если я печатаю список клиентов. Но где мои вопросы вступают в игру, как я могу сделать условные запросы API в моем преобразователе на основе данных, которые я запрашиваю?
Скажем, у каждого клиента может быть несколько адресов, и эти адреса живут на разных конечных точках. Я хотел бы получить эти адреса, как это в моем интерфейсе:
query getCustomer($id: Int!) {
getCustomer(id: $id) {
name
email
address {
city
}
}
}
Как я могу сделать так, чтобы мой распознаватель обрабатывал это на основе моих types
и schemas
? Что-то вроде этого:
async function getCustomer(_, { id }, ctx) {
const customer = await ctx.models.customer.getCustomer(id);
[If the query includes the address field]
const addresses = await ctx.models.customer.getAddressesByCustomer(id);
customer.addresses = addresses;
[/If]
return customer;
}
В конечном итоге цель состоит в том, чтобы преобразователь getCustomer
мог возвращать все данные клиента через различные конечные точки в зависимости от того, какие поля отправлены в запросить, но не делать эти дополнительные запросы API, если поле не запрошено.