Apollo-link-rest: Argumentos de consulta anidados basados ​​en el resultado de la consulta principal

Creado en 23 mar. 2018  ·  7Comentarios  ·  Fuente: apollographql/apollo-link-rest

Me pregunto si es posible realizar consultas anidadas, donde los argumentos de la consulta secundaria se basan en el resultado principal.
por ejemplo, basado en el ejemplo dado de documentos

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 es una serie de URL.
P ¿Es posible pasar la URL al argumento de la ruta de consulta de la película?

question❔

Comentario más útil

¡Esto es factible @ Paddy-Hamilton! Usando su código de ejemplo:

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

La directiva @export(as: …) permite exponer los datos seleccionados previamente para utilizarlos en otras consultas de descanso anidadas. Pequeña complicación: recuerde que cada directiva @rest es probablemente su propia solicitud de red, por lo que en este caso tendrá N + 1 solicitudes donde N es la cantidad de películas en las que está Luke.

Todos 7 comentarios

¡Esto es factible @ Paddy-Hamilton! Usando su código de ejemplo:

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

La directiva @export(as: …) permite exponer los datos seleccionados previamente para utilizarlos en otras consultas de descanso anidadas. Pequeña complicación: recuerde que cada directiva @rest es probablemente su propia solicitud de red, por lo que en este caso tendrá N + 1 solicitudes donde N es la cantidad de películas en las que está Luke.

También puede encontrar útil pathBuilder , la documentación está en el archivo tests/restLink.ts por ahora.

Films es una matriz de URL, no es un objeto que contenga una propiedad de URL.

¿Podrías modificar este ejemplo?
https://codesandbox.io/s/yw2766yl4x

@fbartho, gracias por la explicación y el consejo adicional sobre las solicitudes de red.

Creo que la necesidad de usar este método de solicitud anidado en este ejemplo se debe a la estructura de la API, por lo que tendría que aceptar varias solicitudes de red si quisiera obtener estos datos. Pero gracias, será útil para estructurar mi propia base de datos y api.

@fbartho

He estado buscando más documentación sobre la directiva @export pero solo encontré este ejemplo, que @peggyrayzis menciona en este número . Peggy también menciona que todavía está en fase experimental y no se ha lanzado oficialmente. Estoy buscando usarlo en un proyecto en el que estoy trabajando, pero me sentiría más cómodo si fuera una función oficial admitida, ¿cuál es la hoja de ruta para @match ? ¿Se lanzará pronto?

@ Paddy-Hamilton definitivamente apoyamos la directiva @export(as: dentro de las consultas @rest( anidadas. Las interacciones mixtas apollo-link-rest y apollo-link-state son una característica realmente interesante, pero creo que debe discutirse en el nivel de apollo-link. / cc @peggyrayzis ¿tienes alguna idea aquí?

No estoy familiarizado con la directiva @match , así que me encantaría recibir sugerencias sobre dónde se discutió.

Este problema no está resuelto para mí, eche un vistazo a https://codesandbox.io/s/6yv8y2z9v3

Cargará una sola 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/

El problema es que las películas son una matriz. No creo que esto pueda resolverse con pathBuilder.

¿Fue útil esta página
0 / 5 - 0 calificaciones