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?
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.
Comentários muito úteis
Isso é factível @ Paddy-Hamilton! Usando seu código de exemplo:
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á.