Schema-TutorialLektion 26: Daten aus einer externen API filtern
Lektion 26: Daten aus einer externen API filtern
Wenn die externe API kein Filtern nach einer bestimmten Eigenschaft erlaubt, die wir benötigen, können wir Gato GraphQL verwenden, um die Einträge in der API-Antwort zu durchlaufen und diejenigen zu entfernen, die unsere Bedingung nicht erfüllen.
Schauen wir uns erneut den REST API-Endpunkt newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url an, bei dem einige Benutzer die Eigenschaft url leer haben:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]Die folgende GraphQL-Query filtert die Benutzer heraus, bei denen die Eigenschaft url leer ist, indem sie:
- Daten von der externen API abruft
- Die Einträge über
@underEachArrayItemdurchläuft und jeden Eintrag in der dynamischen Variable$userDataEntryablegt - Die Eigenschaft
urlaus jedem Eintrag extrahiert und diesen Wert in der dynamischen Variable$websiteURLablegt - Prüft, ob dieser Wert leer ist, und das Ergebnis der dynamischen Variable
$isWebsiteURLEmptyzuweist - Die bedingte Direktive
@ifanwendet, die den Wert dieses Eintrags aufnullsetzt, wenn$isWebsiteURLEmptytrueist - Die Direktive
@arrayFilterausführt, um allenull-Einträge herauszufiltern
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
}Die Antwort lautet:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}