Apollo-link-rest: Argumentos de consulta aninhados com base no resultado da consulta pai

Criado em 23 mar. 2018  ·  7Comentários  ·  Fonte: apollographql/apollo-link-rest

Estou me perguntando se é possível realizar consultas aninhadas, onde os argumentos da consulta filho são baseados no resultado pai.
por exemplo, com base nos documentos fornecidos exemplo

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

Filmes são uma série de urls.
P É possível passar a url para o argumento do caminho de consulta do filme?

question❔

Comentários muito úteis

Isso é factível @ Paddy-Hamilton! Usando seu código de exemplo:

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

A diretiva @export(as: …) permite que você exponha os dados selecionados anteriormente para uso em consultas restantes aninhadas. Pequena complicação: lembre-se de que cada diretiva @rest é provavelmente sua própria solicitação de rede e, portanto, neste caso, você terá N + 1 solicitações em que N é o número de filmes em que Luke está.

Todos 7 comentários

Isso é factível @ Paddy-Hamilton! Usando seu código de exemplo:

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

A diretiva @export(as: …) permite que você exponha os dados selecionados anteriormente para uso em consultas restantes aninhadas. Pequena complicação: lembre-se de que cada diretiva @rest é provavelmente sua própria solicitação de rede e, portanto, neste caso, você terá N + 1 solicitações em que N é o número de filmes em que Luke está.

Você também pode achar pathBuilder útil, a documentação está no arquivo tests/restLink.ts por enquanto.

Films é uma matriz de urls, não é um objeto que contém uma propriedade url.

Você poderia modificar este exemplo?
https://codesandbox.io/s/yw2766yl4x

@fbartho obrigado pela explicação e pela dica bônus com relação aos pedidos de rede.

Acho que a necessidade de usar esse método de solicitação aninhada neste exemplo é devido à estrutura da API, então eu teria que aceitar várias solicitações de rede se eu quisesse obter esses dados. Mas obrigado, será útil na estruturação de meu próprio banco de dados e API.

@fbartho

Procurei mais documentação sobre a diretiva @export mas só encontrei realmente este exemplo, que @peggyrayzis menciona nesta edição . Peggy também menciona que ainda está em fase experimental e não foi lançado oficialmente. Estou tentando usá-lo em um projeto no qual estou trabalhando, mas me sentiria mais confortável se fosse um recurso oficial com suporte, qual é o roteiro para @match , ele será lançado em breve?

@ Paddy-Hamilton nós definitivamente apoiar o @export(as: directiva no aninhadas @rest( consultas. As interações mistas apollo-link-rest e apollo-link-state são um recurso muito legal, mas acho que precisa ser discutido no nível do apollo-link. / cc @peggyrayzis você tem alguma ideia aqui?

Não estou familiarizado com a diretiva @match então adoraria qualquer indicação de onde isso foi discutido.

Este problema não foi resolvido para mim, dê uma olhada em https://codesandbox.io/s/6yv8y2z9v3

Ele irá carregar um único 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/

o problema é que os filmes são uma matriz. Não acho que isso possa ser resolvido pelo pathBuilder.

Esta página foi útil?
0 / 5 - 0 avaliações