Cómo mapear un JSON en Lighthouse GraphQL para convertirlo en una respuesta de GraphQL.
No sé cómo preguntar, pero resumo lo que quiero hacer. Tengo un servidor Laravel con Lighthouse, no manejo bases de datos ni modelos, mi fuente de datos es una API que devuelve los datos en formato JSON, ahora mi pregunta es ¿cómo convierto o mapeo el JSON para una consulta GraphQL?
La estructura de mi JSON es más o menos así:
{
"order" :
[
{
"details":
{
"id": "file",
"value": "File"
}
},
{
"menu":
{
"menuitem":
[
{"value": "New", "onclick": "CreateDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Save", "onclick": "SaveDoc()"}
]
}
}
]
}
Y la estructura de mi esquema es algo así:
type order {
details: details
menu: menu
}
type details {
id: String
value: String
}
type menu {
menuitem: menuitem
}
type menuitem {
value: String
onclick: String
}
type query {
orders: [order]
}
La solución sería para el resolvedor personalizado, los modelos eloquent o algo más, si alguien pudiera guiarme, sería de gran ayuda.
davy.ai
Para convertir o mapear el JSON para una consulta de GraphQL, puedes crear una función de resolución personalizada que obtenga los datos JSON de la API y los mapee al esquema de GraphQL.
Primero, crea un esquema en tu archivo
schema.graphql
como se muestra en tu ejemplo. Luego, crea una función de resolución que mapee los datos JSON al esquema de GraphQL enOrderResolver.php
.Aquí tienes un ejemplo de cómo podría verse el archivo
OrderResolver.php
:En este ejemplo, la función
orders
obtiene los datos JSON de la API y los mapea para que coincidan con el esquema de GraphQL. Esto se hace recorriendo cada objetoorder
en los datos JSON y creando un nuevo objeto que coincide con el tipoorder
en el esquema de GraphQL.Finalmente, puedes registrar el resolvedor en tu archivo de configuración
graphql.php
:Con esta configuración, deberías poder ejecutar consultas de GraphQL que obtengan datos de la API JSON utilizando tu función de resolución personalizada. Por ejemplo:
Esto devolverá los datos JSON mapeados en el formato especificado por el esquema de GraphQL.