Şema eğitimiDers 26: Harici bir API'den veri filtreleme
Ders 26: Harici bir API'den veri filtreleme
Harici API, ihtiyacımız olan belirli bir özelliğe göre filtrelemeye izin vermiyorsa, API yanıtındaki girişleri yinelemek ve koşulumuzu karşılamayanları kaldırmak için Gato GraphQL'i kullanabiliriz.
Bazı kullanıcıların url özelliğinin boş olduğu REST API endpoint'i olan newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url adresine yeniden başvuralım:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]Aşağıdaki GraphQL query'si, url özelliği boş olan kullanıcıları şu adımlarla filtreler:
- Harici API'den veri alma
@underEachArrayItemaracılığıyla girişleri yineleme ve her girişi$userDataEntrydinamik değişkenine yerleştirme- Her girişten
urlözelliğini çıkarma ve bu değeri$websiteURLdinamik değişkenine yerleştirme - Bu değerin boş olup olmadığını kontrol etme ve sonucu
$isWebsiteURLEmptydinamik değişkenine atama $isWebsiteURLEmptydeğeritrueise o girişin değerininullolarak ayarlayan koşullu@ifdirektifini uygulama- Tüm
nullgirişleri filtrelemek için@arrayFilterdirektifini çalıştırma
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
}Yanıt şudur:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}