Tutorial skemaPelajaran 26: Memfilter data dari API eksternal
Pelajaran 26: Memfilter data dari API eksternal
Jika API eksternal tidak mengizinkan pemfilteran berdasarkan properti tertentu yang kita butuhkan, kita dapat menggunakan Gato GraphQL untuk mengiterasi entri dalam respons API dan menghapus entri yang tidak memenuhi kondisi kita.
Mari kita merujuk kembali ke endpoint REST API newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url, di mana beberapa pengguna memiliki properti url yang kosong:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]Query GraphQL di bawah ini memfilter pengguna yang properti url-nya kosong, dengan cara:
- Mengambil data dari API eksternal
- Mengiterasi entri melalui
@underEachArrayItem, dan menempatkan setiap entri di bawah variabel dinamis$userDataEntry - Mengekstrak properti
urldari setiap entri, dan menempatkan nilai tersebut di bawah variabel dinamis$websiteURL - Memeriksa apakah nilai tersebut kosong, dan menetapkan hasilnya di bawah variabel dinamis
$isWebsiteURLEmpty - Menerapkan direktif kondisional
@ifyang, jika$isWebsiteURLEmptybernilaitrue, menetapkan nilai entri tersebut sebagainull - Menjalankan direktif
@arrayFilteruntuk memfilter semua entrinull
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
}Responsnya adalah:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}