Bibliothèque de queries
Bibliothèque de queriesEnrichir des données depuis une API externe

Enrichir des données depuis une API externe

Si nous devons récupérer des données depuis une API externe, mais que nous devons modifier les résultats d'une certaine façon (par exemple en fournissant une valeur par défaut lorsqu'un champ est vide), nous pouvons utiliser Gato GraphQL pour implémenter une passerelle d'API qui transforme les entrées selon nos besoins.

Par exemple, lors de l'invocation du point de terminaison REST API /users d'un site WordPress, nous pouvons ajouter une valeur par défaut lorsque le champ url est vide, ainsi qu'une propriété supplémentaire link avec le code HTML :

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
      )
}