Retour au blog
StreamingFast

Servez vos données Substreams via GraphQL : aucun serveur API requis

En bref : les Hosted Sinks peuvent désormais exposer une API GraphQL en lecture seule et une console sur la base de données dans laquelle écrit votre sink. C'est propulsé par Hasura, cela suit automatiquement vos tables et vues, et vous l'activez avec une seule case à cocher, à la création du sink ou à tout moment après. Pour les équipes qui dépassent un Subgraph et ont l'habitude d'interroger leurs données en GraphQL, cela supprime le dernier point de friction pour franchir le pas vers Substreams.

Ce qui a été livré

La couche GraphQL est une nouvelle option sur les Hosted Sinks de StreamingFast. Une fois activée, elle se déploie aux côtés de votre sink et sert une API GraphQL sur la même base de données que celle où écrit le sink. Vous contrôlez la base de données, StreamingFast y écrit, Hasura fournit la couche de lecture :

  • Schéma automatique. Hasura suit chaque table et vue du schéma cible du sink et génère un champ de requête GraphQL pour chacune. Quand votre sink crée de nouvelles tables, la couche les récupère. Les vues que vous ajoutez vous-même sont suivies de la même façon.
  • Lecture seule par conception. Chaque requête s'exécute avec un rôle qui n'a que le droit SELECT, rien d'autre. Aucun champ d'insertion, de mise à jour, de suppression ou de mutation n'est jamais généré. Le sink reste le seul à écrire dans votre base de données.
  • Une console dans le navigateur. Explorez le schéma, construisez et exécutez des requêtes, et enregistrez n'importe quelle requête comme point de terminaison REST sous /api/rest. La console se connecte avec votre session portail existante, sans connexion séparée.
  • Postgres et ClickHouse. Les deux types de bases de données des Hosted Sinks sont pris en charge.
  • Ajout ou retrait à tout moment. C'est un déploiement séparé. L'activer ou la désactiver ne touche jamais au pipeline ; le sink continue d'écrire exactement comme avant.

Les requêtes s'authentifient avec l'une des clés API de votre organisation depuis The Graph Market, passée dans un en-tête X-Api-Key.

curl https://<votre-endpoint-sink>/v1/graphql \
  -H "X-Api-Key: <votre-cle-api>" \
  -d '{"query":"{ __typename }"}'

Guide complet : Servir vos données via GraphQL.

Une suite naturelle aux Subgraphs

Subgraphs et Substreams sont des outils complémentaires dans le même écosystème. Cet article de blog de The Graph explique comment penser chacun d'eux, ainsi que quand migrer de l'un à l'autre. Le passage est une progression, pas une compétition, et ne signifie pas repartir de zéro. Vous vous tournez vers Substreams quand votre usage dépasse ce pour quoi un Subgraph a été conçu :

  • Oubliez les synchronisations de plusieurs jours. Substreams parallélise les backfills sur plusieurs cœurs CPU au lieu de traiter bloc par bloc, ce qui réduit le temps de retraitement après chaque changement dans votre logique de mapping.
  • Gérez des chaînes à haut débit et des transformations lourdes côté serveur.
  • Stockez les données à plusieurs endroits. Envoyez-les vers Postgres, ClickHouse, des fichiers ou un flux, pas seulement vers un unique point de terminaison GraphQL.
  • Accédez au suivi d'état au niveau des comptes et à d'autres patterns qu'un Subgraph linéaire gère mal.

Vous restez dans l'écosystème de The Graph du début à la fin. Votre investissement dans votre Subgraph est conservé : substreams-convert et les agent skills font l'essentiel du portage pour vous, il s'agit donc d'un travail assisté plutôt que d'une réécriture manuelle. Et maintenant, avec la couche GraphQL, la surface de requêtage de l'autre côté peut elle aussi rester familière : le même protocole, une console navigable, et des points de terminaison REST.

Remarque : les requêtes GraphQL des Hosted Sinks s'authentifient avec une clé API de The Graph Market. Si vous n'avez jusqu'ici utilisé qu'une clé de requête Subgraph, il s'agit d'une nouvelle clé à créer via un compte sur le portail The Graph Market ; ce n'est pas le même identifiant.

À qui cela s'adresse

  • Aux équipes qui font croître un Subgraph et qui ont besoin d'un retraitement plus rapide, d'un débit plus élevé, ou d'une sortie au-delà de GraphQL, sans quitter l'écosystème de The Graph ni retravailler leur couche de lecture.
  • Aux développeurs qui pensent en GraphQL et veulent conserver cette surface de requêtage après avoir déplacé leur indexation vers Substreams.
  • À quiconque veut lire ses données indexées via HTTP sans monter et exploiter un serveur API, câbler l'authentification, ou garder un schéma synchronisé avec une base de données en mouvement.

Pourquoi le chemin de migration est plus court désormais

La couche GraphQL est la nouvelle pièce d'un effort plus large pour réduire le temps et les connaissances nécessaires pour passer à Substreams :

  • Compétences de codage agentique. Les Substreams agent skills open source (dépôt) donnent à un agent de codage une expertise Substreams poussée : échafauder des manifests, écrire des modules Rust, définir des protobufs, construire des sinks SQL, tester, et convertir un Subgraph existant en graphe de modules Substreams.
  • Le service Hosted Sink. StreamingFast exécute le sink pour vous. Vous fournissez la base de données ; l'infrastructure gérée s'occupe du processus du sink, du déploiement, de la gestion du curseur et des réorganisations de chaîne.
  • La couche GraphQL hébergée. Désormais, le côté lecture est lui aussi géré.

Mis bout à bout : un agent aide à convertir la logique d'indexation, un Hosted Sink l'exécute contre votre base de données, et une API GraphQL hébergée la sert à votre application. Moins à construire, moins à apprendre, et moins à exploiter que de câbler chaque pièce vous-même.

Pour commencer

  1. Ouvrez l'assistant New Sink sur The Graph Market.
  2. Configurez votre package Substreams et votre base de données.
    • Vous n'avez pas encore écrit votre package Substreams ? Utilisez les Substreams agent skills pour faire ce travail à votre place avec des instructions simples, y compris la conversion d'un Subgraph existant.
  3. À l'étape GraphQL API, sélectionnez Expose a GraphQL API over this database.
  4. Déployez. Une fois que la couche affiche Deployed, récupérez l'endpoint et le lien de la console depuis le panneau GraphQL du sink.

Vous avez déjà un sink en cours d'exécution ? Ouvrez sa page de détail, cliquez sur Edit, allez dans l'onglet GraphQL, et activez-la là.

FAQ

Qui héberge la base de données — StreamingFast ou moi ?

Vous. Un Hosted Sink écrit dans une base de données Postgres ou ClickHouse que vous possédez et contrôlez (votre propre instance, ou une instance gérée comme Supabase, Neon ou ClickHouse Cloud). StreamingFast n'héberge jamais votre base de données. Ce que StreamingFast héberge, c'est le processus du sink qui y écrit, et désormais, en option, la couche GraphQL qui la lit. La couche GraphQL, c'est Hasura qui s'exécute comme couche de lecture gérée au-dessus de votre base de données, pas une base de données que StreamingFast fournit.

La couche GraphQL permet-elle aux clients d'écrire dans ma base de données ?

Non. Chaque requête s'exécute avec un rôle de base de données qui n'a que le droit SELECT, rien d'autre. Aucun champ d'insertion, de mise à jour, de suppression ou de mutation n'est généré, et le sink reste le seul à écrire dans votre base de données.

Quelles bases de données sont prises en charge ?

Les deux types de bases de données des Hosted Sinks : Postgres et ClickHouse.

Comment les requêtes s'authentifient-elles ?

Avec l'une des clés API de votre organisation depuis The Graph Market, passée dans un en-tête X-Api-Key. Une clé de requête Subgraph est un identifiant différent et ne fonctionne pas ici ; vous créez une nouvelle clé depuis la vue de votre compte sur le tableau de bord de The Graph Market.

Puis-je ajouter la couche GraphQL à un sink déjà en cours d'exécution ?

Oui. Ouvrez la page de détail du sink, cliquez sur Edit, allez dans l'onglet GraphQL, et activez-la. Elle se déploie comme un service séparé, donc rien ne change au pipeline en cours d'exécution.

L'activer change-t-il la façon dont le sink fonctionne ?

Non. La couche GraphQL est un déploiement séparé qui lit depuis la même base de données. L'activer ou la désactiver ne touche jamais au pipeline du sink.

Que se passe-t-il pour les tables que le sink crée plus tard ?

Hasura les suit automatiquement et génère un champ de requête pour chacune. Les vues que vous ajoutez vous-même sont suivies de la même façon.

Où puis-je exécuter des requêtes et obtenir le schéma ?

Depuis la console dans le navigateur, accessible depuis le panneau GraphQL du sink. Elle se connecte avec votre session portail existante, vous permet d'explorer le schéma et de construire des requêtes, et peut enregistrer n'importe quelle requête comme point de terminaison REST sous /api/rest.