Мне интересно, можно ли выполнять вложенные запросы, где аргументы дочернего запроса основаны на родительском результате.
например, на основе приведенного в документации примера
const getLukeRestLink = gql`
query luke {
Luke @rest(type: "Person", path: "people/1/") {
name
films {
film @rest(type: "Film", path: filmUrl) { // the filmUrl is the url that is returned in the films field
title
}
}
}
}
`;
Фильмы - это массив URL-адресов.
В. Можно ли передать URL-адрес в аргумент пути запроса фильма?
Это выполнимо @ Пэдди-Гамильтон! Используя ваш пример кода:
query luke {
Luke @rest(type: "Person", path: "people/1/") {
name
films {
url @export(as: "url")
film @rest(type: "Film", path: ":url") {
title
}
}
}
}
Директива @export(as: …)
позволяет вам предоставлять ранее выбранные данные для дальнейшего использования вложенными запросами на отдых. Небольшое осложнение: помните, что каждая директива @rest
вероятно, является собственным сетевым запросом, и поэтому в этом случае у вас будет N + 1 запросов, где N - количество фильмов, в которых находится Люк.
Вы также можете найти pathBuilder
полезным, документация пока находится в файле tests/restLink.ts
.
Films - это массив URL-адресов, а не объект, содержащий свойство url.
Не могли бы вы изменить этот пример?
https://codesandbox.io/s/yw2766yl4x
@fbartho спасибо за объяснение и бонусный совет по сетевым запросам.
Я думаю, что необходимость использования этого метода вложенного запроса в этом примере связана со структурой api, поэтому мне пришлось бы просто принять несколько сетевых запросов, если бы я хотел получить эти данные. Но спасибо, будет полезно в структурировании моей собственной базы данных и api.
@fbartho
Я искал дополнительную документацию по директиве @export
но на самом деле нашел только этот пример, который @peggyrayzis упоминает в этом выпуске . Пегги также упоминает, что он все еще находится в экспериментальной фазе и официально не выпущен. Я собираюсь использовать его в проекте, над которым я работаю, но мне было бы удобнее, если бы это была официальная поддерживаемая функция, какова дорожная карта для @match
, скоро ли она будет выпущена?
@ Paddy-Hamilton: мы определенно поддерживаем директиву @export(as:
во вложенных запросах @rest(
. Смешанные взаимодействия apollo-link-rest и apollo-link-state - действительно крутая функция, но я думаю, что ее нужно обсудить на уровне apollo-link. / cc @peggyrayzis есть ли у вас какие-нибудь идеи?
Я не знаком с директивой @match
поэтому мне хотелось бы получить любые указатели на то, где это обсуждалось.
Для меня эта проблема не решена, пожалуйста, посмотрите https://codesandbox.io/s/6yv8y2z9v3
Он загрузит один URL-адрес https://swapi.co/api/https://swapi.co/api/films/2/,https://swapi.co/api/films/6/,https://swapi.co/api/films/3/,https://swapi.co/api/films/1/,https://swapi.co/api/films/7/
Проблема в том, что фильмы - это массив. Я не думаю, что это можно решить с помощью pathBuilder.
Самый полезный комментарий
Это выполнимо @ Пэдди-Гамильтон! Используя ваш пример кода:
Директива
@export(as: …)
позволяет вам предоставлять ранее выбранные данные для дальнейшего использования вложенными запросами на отдых. Небольшое осложнение: помните, что каждая директива@rest
вероятно, является собственным сетевым запросом, и поэтому в этом случае у вас будет N + 1 запросов, где N - количество фильмов, в которых находится Люк.