lo que estoy tratando de hacer es consultar la información de la cuenta a bcoin a través de su interfaz http rest.
Para hacerlo, debo
accountName
llamando al GET /wallet/:id/account
GET /wallet/:id/account/:accountName
El problema es que la primera llamada devolverá algo como ["default", "mySecondAccountName"]
que no sé cómo analizar como respuesta graphql, ni pasar directamente al segundo GET
por ejemplo, cuando intenté realizar una consulta siguiendo la consulta,
query (id: "primary") @rest(type: AccountName, path: "/wallet/:id/account") {
default
Obtendré Error: Network error: Cannot create property 'default' on string 'default'
No pude encontrar ninguna pista en el documento, pero este parece un caso muy común, así que debo estar perdiendo algo muy simple. Realmente agradezco si alguien pudiera señalarme lo que debo buscar.
Solo supongo que no estoy familiarizado con bcoin, pero aquí hay una sugerencia:
query Account(id: $id){
account(id: $id) @rest(type: "[String]", path: "/wallet/:id/account")
}
Luego, obtiene los resultados de los datos y los pasa a una nueva consulta que obtiene los detalles de la cuenta.
Gracias por su amable y rápida respuesta. @fbartho
Quizás no debería haberle mencionado a bcoin, mi problema es más simple
En el ejemplo de la directiva @export
en el documento, tiene un ejemplo de llamada al punto final REST dos veces .
Mi pregunta es, ¿qué debo hacer cuando la primera consulta en este ejemplo devuelve una matriz de Scalar en lugar de una matriz de objeto?
como no tiene clave, parece que no hay forma de especificar qué argumento se debe exportar.
También intenté no usar @export
y en su lugar consultar como mencionaste, pero el resultado de la búsqueda es {}
con la siguiente advertencia
Missing field account in {}
por cierto, creo que en tu sugerencia
query Account(id: $id)
debiera ser
query Account($id: id)
Descubrí que cuando ejecuto el comando que sugieres, es decir
query Account(id: $id){
account(id: $id) @rest(type: "[String]", path: "/wallet/:id/account")
}
En realidad, no ejecutará ninguna consulta y solo devolverá {}
como data
.
así que debo especificar { theFieldNameIDesire }
después de la línea de account
, el problema es que no tengo un nombre de campo para especificar :(
@joemphilips Creo que deberías usar un typePatcher
Lo uso para manejar una respuesta no compatible con graphql como
{
"100": {
"id": 100,
"node_id": 105,
"category_id": 8,
"title": "Title 100",
"highlight": true
},
"138": {
"id": 138,
"node_id": 106,
"category_id": 7,
"title": "Title 138",
"highlight": false
},
"140": {
"id": 140,
"node_id": 101,
"category_id": 9,
"title": "Title 140",
"highlight": false
},
"158": {
"id": 158,
"node_id": 146,
"category_id": 4,
"title": "Title 158",
"highlight": false
}
}
Definición de consulta
import { gql } from 'apollo-boost';
export const GET_NEWS_QUERY = gql`
query getNews {
News @rest(type: "News", path: "news") {
data
}
}
`;
Configuración de RestLink
const restLink = new RestLink({
uri: API_URL,
typePatcher: {
News: (data, outerType) => {
if (outerType === 'News') {
data = Object.keys(data).map(id => {
const result = data[id];
if (result) {
return {
__typename: 'News',
...result
};
}
});
}
return { data };
}
}
});
Uso de consultas
`` js
render () {
regreso (
if (cargando) {
regreso (
);
}
if (error) {
return (
<View>
<Text>Error :(</Text>
</View>
);
}
const news = data && data.News && data.News.data;
const filteredNews = news && news.filter(Boolean);
return (
<Styles.Container>
<Carousel
data={filteredNews}
handleOnPress={this.navigateToScreen}
/>
</Styles.Container>
);
}}
</Query>
);
}
'
''
Lamento responder tarde. su solución parece no funcionar para la cadena / escalar de la matriz. Pero parece arreglado . Lo intentaré otra vez. Y puede que vuelva a abrir si sigo teniendo problemas. Gracias.
Comentario más útil
@joemphilips Creo que deberías usar un typePatcher
Lo uso para manejar una respuesta no compatible con graphql como
Definición de consulta
Configuración de RestLink
Uso de consultas
{({cargando, error, datos}) => {
Cargando...
`` js
render () {
regreso (
if (cargando) {
regreso (
);
}
}
'
''