スキーマチュートリアルレッスン26:外部APIからのデータのフィルタリング
レッスン26:外部APIからのデータのフィルタリング
外部APIが必要なプロパティによるフィルタリングを許可していない場合、Gato GraphQLを使用してAPIレスポンスのエントリを反復処理し、条件を満たさないものを除外することができます。
REST APIエンドポイント newapi.getpop.org/wp-json/wp/v2/users/?_fields=id,name,url を再度参照します。このエンドポイントでは、一部のユーザーの url プロパティが空になっています:
[
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
},
{
"id": 7,
"name": "Test",
"url": ""
},
{
"id": 2,
"name": "Theme Demos",
"url": ""
}
]以下のGraphQLクエリは、url プロパティが空のユーザーをフィルタリングして除外します。その処理手順は次のとおりです:
- 外部APIからデータを取得する
@underEachArrayItemを使用してエントリを反復処理し、各エントリをダイナミック変数$userDataEntryに格納する- 各エントリから
urlプロパティを取り出し、その値をダイナミック変数$websiteURLに格納する - この値が空かどうかを確認し、結果をダイナミック変数
$isWebsiteURLEmptyに代入する - 条件ディレクティブ
@ifを適用し、$isWebsiteURLEmptyがtrueの場合にそのエントリの値をnullに設定する - ディレクティブ
@arrayFilterを実行してすべてのnullエントリを除外する
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
}レスポンスは次のとおりです:
{
"data": {
"usersWithWebsiteURL": [
{
"id": 1,
"name": "leo",
"url": "https://leoloso.com"
}
]
}
}