Apollo-link-rest: Arguments de requête imbriqués basés sur le résultat de la requête parente

Créé le 23 mars 2018  ·  7Commentaires  ·  Source: apollographql/apollo-link-rest

Je me demande s'il est possible d'effectuer des requêtes imbriquées, où les arguments de la requête enfant sont basés sur le résultat parent.
par exemple sur la base des documents donnés par exemple

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
        }
      }
    }
  }
`;

Films est un éventail d'URL.
Q Est-il possible de transmettre l'URL à l'argument de chemin de requête de film?

question❔

Commentaire le plus utile

C'est faisable @ Paddy-Hamilton! En utilisant votre exemple de code:

  query luke {
    Luke @rest(type: "Person", path: "people/1/") {
      name
      films {
        url @export(as: "url")
        film @rest(type: "Film", path: ":url") {
          title
        }
      }
    }
  }

La directive @export(as: …) vous permet d'exposer les données précédemment sélectionnées pour d'autres requêtes de repos imbriquées à utiliser. Petite complication: rappelez-vous que chaque directive @rest est probablement sa propre requête réseau, et donc dans ce cas, vous aurez N + 1 requêtes où N est le nombre de films dans lesquels Luke est.

Tous les 7 commentaires

C'est faisable @ Paddy-Hamilton! En utilisant votre exemple de code:

  query luke {
    Luke @rest(type: "Person", path: "people/1/") {
      name
      films {
        url @export(as: "url")
        film @rest(type: "Film", path: ":url") {
          title
        }
      }
    }
  }

La directive @export(as: …) vous permet d'exposer les données précédemment sélectionnées pour d'autres requêtes de repos imbriquées à utiliser. Petite complication: rappelez-vous que chaque directive @rest est probablement sa propre requête réseau, et donc dans ce cas, vous aurez N + 1 requêtes où N est le nombre de films dans lesquels Luke est.

Vous pouvez également trouver pathBuilder utile, la documentation est dans le fichier tests/restLink.ts pour le moment.

Films est un tableau d'urls, ce n'est pas un objet contenant une propriété d'url.

Pouvez-vous modifier cet exemple?
https://codesandbox.io/s/yw2766yl4x

@fbartho merci pour l'explication et le conseil bonus concernant les demandes du réseau.

Je pense que la nécessité d'utiliser cette méthode de demande imbriquée dans cet exemple est due à la structure de l'API, donc je devrais simplement accepter plusieurs demandes réseau si je voulais obtenir ces données. Mais merci, sera utile pour structurer ma propre base de données et api.

@fbartho

J'ai cherché plus de documentation autour @export directive cet exemple, que @peggyrayzis mentionne dans ce numéro . Peggy mentionne également qu'il est toujours en phase expérimentale et n'est pas officiellement publié. Je cherche à l'utiliser dans un projet sur lequel je travaille, mais je me sentirais plus à l'aise s'il s'agissait d'une fonctionnalité officiellement prise en charge, quelle est la feuille de route pour @match , va-t-elle être publiée bientôt?

@ Paddy-Hamilton nous supportons définitivement la directive @export(as: dans les requêtes @rest( imbriquées. Les interactions mixtes apollo-link-rest et apollo-link-state sont une fonctionnalité vraiment intéressante, mais je pense qu'il faut en discuter au niveau apollo-link. / cc @peggyrayzis avez-vous un aperçu ici?

Je ne connais pas la directive @match donc j'aimerais beaucoup d'indications sur l'endroit où cela a été discuté.

Ce problème n'est pas résolu pour moi, veuillez jeter un œil à https://codesandbox.io/s/6yv8y2z9v3

Il chargera une seule 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/

Le problème est que les films sont un tableau. Je ne pense pas que cela puisse être résolu par pathBuilder.

Cette page vous a été utile?
0 / 5 - 0 notes