Queryライブラリ外部APIからのデータを拡張する
外部APIからのデータを拡張する
外部APIからデータを取得する必要があるものの、結果を何らかの方法で変更しなければならない場合(例えば、あるフィールドが空のときにデフォルト値を設定するなど)、Gato GraphQLを使ってAPIゲートウェイを実装し、エントリを必要に応じて変換することができます。
たとえば、あるWordPressサイトのREST APIエンドポイント/usersを呼び出す際に、urlフィールドが空の場合にデフォルト値を追加し、HTMLコードを含む追加のlinkプロパティを付与することができます:
query FilterDataFromWordPressAPI(
# eg: https://somesite.com/wp-json/wp/v2/users/?_fields=id,name,url
$endpointURL: URL!
) {
usersWithLinkAndDefaultURL: _sendJSONObjectCollectionHTTPRequest(
input: {
url: $endpointURL
}
)
# Set a default URL for users without any
@underEachArrayItem
@underJSONObjectProperty(
by: {
key: "url"
}
)
@default(
value: "https://mysite.com"
condition: IS_EMPTY
)
# Add a new "link" entry on the JSON object
@underEachArrayItem(
affectDirectivesUnderPos: [1, 2, 3, 4],
passValueOnwardsAs: "userListItem"
)
@applyField(
name: "_objectProperty",
arguments: {
object: $userListItem,
by: {
key: "name"
}
},
passOnwardsAs: "userName"
)
@applyField(
name: "_objectProperty",
arguments: {
object: $userListItem,
by: {
key: "url"
}
},
passOnwardsAs: "userURL"
)
@applyField(
name: "_sprintf",
arguments: {
string: "<a href=\"%s\">%s</a>",
values: [$userURL, $userName]
},
passOnwardsAs: "userLink"
)
@applyField(
name: "_objectAddEntry",
arguments: {
object: $userListItem,
key: "link",
value: $userLink
},
setResultInResponse: true
)
}