Queryライブラリ
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
      )
}