Hướng dẫn schemaBài 26: Lọc dữ liệu từ API bên ngoài
Bài 26: Lọc dữ liệu từ API bên ngoài
Nếu API bên ngoài không cho phép lọc theo một thuộc tính nhất định mà chúng ta cần, chúng ta có thể dùng Gato GraphQL để duyệt qua các mục trong phản hồi của API và loại bỏ những mục không thỏa điều kiện của mình.
Hãy tham chiếu lại endpoint REST API newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url, nơi một số người dùng có thuộc tính url rỗng:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]Queries GraphQL dưới đây lọc ra những người dùng có thuộc tính url rỗng, bằng cách:
- Lấy dữ liệu từ API bên ngoài
- Duyệt qua các mục bằng
@underEachArrayItem, và đặt mỗi mục vào biến động$userDataEntry - Trích xuất thuộc tính
urltừ mỗi mục, và đặt giá trị này vào biến động$websiteURL - Kiểm tra xem giá trị này có rỗng hay không, và gán kết quả vào biến động
$isWebsiteURLEmpty - Áp dụng directive có điều kiện
@if, nếu$isWebsiteURLEmptylàtrue, sẽ đặt giá trị của mục đó thànhnull - Thực thi directive
@arrayFilterđể lọc bỏ tất cả các mụcnull
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
}Phản hồi là:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}