Schema-tutorialLes 26: Gegevens filteren van een externe API
Les 26: Gegevens filteren van een externe API
Als de externe API geen filtering toestaat op een bepaalde eigenschap die we nodig hebben, kunnen we Gato GraphQL gebruiken om over de vermeldingen in de API-respons te itereren en die te verwijderen die niet aan onze voorwaarde voldoen.
Laten we opnieuw verwijzen naar het REST API-endpoint newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url, waarbij sommige gebruikers een lege eigenschap url hebben:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]De onderstaande GraphQL-query filtert de gebruikers waarbij de eigenschap url leeg is, door:
- Gegevens op te halen van de externe API
- Over de vermeldingen te itereren via
@underEachArrayItem, en elke vermelding onder de dynamische variabele$userDataEntryte plaatsen - Eigenschap
urluit elke vermelding te extraheren en deze waarde onder de dynamische variabele$websiteURLte plaatsen - Te controleren of deze waarde leeg is, en het resultaat toe te wijzen aan de dynamische variabele
$isWebsiteURLEmpty - De conditionele directive
@iftoe te passen die, als$isWebsiteURLEmptytrueis, de waarde van die vermelding opnullzet - Directive
@arrayFilteruit te voeren om allenull-vermeldingen te filteren
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
}De respons is:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}