Apollo-link-rest: Вложенные аргументы запроса на основе результата родительского запроса

Созданный на 23 мар. 2018  ·  7Комментарии  ·  Источник: apollographql/apollo-link-rest

Мне интересно, можно ли выполнять вложенные запросы, где аргументы дочернего запроса основаны на родительском результате.
например, на основе приведенного в документации примера

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-адрес в аргумент пути запроса фильма?

question❔

Самый полезный комментарий

Это выполнимо @ Пэдди-Гамильтон! Используя ваш пример кода:

  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 - количество фильмов, в которых находится Люк.

Все 7 Комментарий

Это выполнимо @ Пэдди-Гамильтон! Используя ваш пример кода:

  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.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги