Tutorial del esquemaLección 26: Filtrar datos de una API externa
Lección 26: Filtrar datos de una API externa
Si la API externa no permite filtrar por una propiedad determinada que necesitamos, podemos usar Gato GraphQL para iterar sobre las entradas de la respuesta de la API y eliminar las que no cumplan con nuestra condición.
Volvamos a referirnos al endpoint de la REST API newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url, donde algunos usuarios tienen la propiedad url vacía:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]La consulta GraphQL de abajo filtra los usuarios cuyo url está vacío:
- Obteniendo los datos de la API externa
- Iterando sobre las entradas mediante
@underEachArrayItemy colocando cada entrada bajo la variable dinámica$userDataEntry - Extrayendo la propiedad
urlde cada entrada y colocando ese valor bajo la variable dinámica$websiteURL - Comprobando si ese valor está vacío y asignando el resultado a la variable dinámica
$isWebsiteURLEmpty - Aplicando la directiva condicional
@ifque, si$isWebsiteURLEmptyestrue, establece el valor de esa entrada comonull - Ejecutando la directiva
@arrayFilterpara filtrar todas las entradasnull
query {
usersWithWebsiteURL: _sendJSONObjectCollectionHTTPRequest(
input: {
url: "https://newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url"
}
)
# Remove users without a website URL
@underEachArrayItem(
passValueOnwardsAs: "userDataEntry"
affectDirectivesUnderPos: [1, 2, 3]
)
@applyField(
name: "_objectProperty"
arguments: {
object: $userDataEntry
by: {
key: "url"
}
}
passOnwardsAs: "websiteURL"
)
@applyField(
name: "_isEmpty"
arguments: {
value: $websiteURL
}
passOnwardsAs: "isWebsiteURLEmpty"
)
@if(
condition: $isWebsiteURLEmpty
)
@setNull
@arrayFilter
}La respuesta es:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}