Tutorial dello schemaLezione 26: Filtrare dati da un'API esterna
Lezione 26: Filtrare dati da un'API esterna
Se l'API esterna non consente di filtrare per una determinata proprietà di cui abbiamo bisogno, possiamo usare Gato GraphQL per iterare sulle voci della risposta dell'API e rimuovere quelle che non soddisfano la nostra condizione.
Riferiamoci nuovamente all'endpoint della REST API newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url, dove alcuni utenti hanno la proprietà url vuota:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]La query GraphQL seguente filtra gli utenti la cui proprietà url è vuota, mediante:
- Il recupero dei dati dall'API esterna
- L'iterazione sulle voci tramite
@underEachArrayItem, e il posizionamento di ciascuna voce nella variabile dinamica$userDataEntry - L'estrazione della proprietà
urlda ciascuna voce, e il posizionamento di tale valore nella variabile dinamica$websiteURL - La verifica se questo valore è vuoto, e l'assegnazione del risultato nella variabile dinamica
$isWebsiteURLEmpty - L'applicazione della direttiva condizionale
@ifche, se$isWebsiteURLEmptyètrue, imposta il valore di quella voce comenull - L'esecuzione della direttiva
@arrayFilterper filtrare tutte le vocinull
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 risposta è:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}