Tutoriel du schémaLeçon 26 : Filtrer des données depuis une API externe
Leçon 26 : Filtrer des données depuis une API externe
Si l'API externe ne permet pas de filtrer par une certaine propriété dont nous avons besoin, nous pouvons utiliser Gato GraphQL pour itérer sur les entrées de la réponse de l'API et supprimer celles qui ne satisfont pas notre condition.
Référons-nous à nouveau à l'endpoint de la REST API newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url, où certains utilisateurs ont la propriété url vide :
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]La requête GraphQL ci-dessous filtre les utilisateurs dont la propriété url est vide, en :
- Récupérant les données depuis l'API externe
- Itérant sur les entrées via
@underEachArrayItem, et plaçant chaque entrée sous la variable dynamique$userDataEntry - Extrayant la propriété
urlde chaque entrée, et plaçant cette valeur sous la variable dynamique$websiteURL - Vérifiant si cette valeur est vide, et assignant le résultat sous la variable dynamique
$isWebsiteURLEmpty - Appliquant la directive conditionnelle
@ifqui, si$isWebsiteURLEmptyesttrue, définit la valeur de cette entrée commenull - Exécutant la directive
@arrayFilterpour filtrer toutes les entréesnull
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 réponse est :
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}