GraphQL

Plugin de GraphQL para OpenReplay.

GraphQL

Este plugin te permite capturar peticiones GraphQL e inspeccionarlas más tarde mientras reproduces las grabaciones de sesiones. Esto resulta muy útil para comprender y solucionar problemas. El plugin de GraphQL es compatible con las implementaciones de Apollo y Relay.

npm i @openreplay/tracker-graphql

Inicializa el paquete @openreplay/tracker como de costumbre y carga el plugin en él. La llamada a plugin devolverá la función, que recibe cuatro variables operationKind, operationName, variables, result y duration (por defecto 0) y devuelve result sin cambios.

import Tracker from '@openreplay/tracker';
import trackerGraphQL from '@openreplay/tracker-graphql';

const tracker = new Tracker({
  projectKey: YOUR_PROJECT_KEY,
});

export const recordGraphQL = tracker.plugin(trackerGraphQL());

Si estás usando las herramientas de red de Relay, simplemente puedes [crear un middleware](https://github.com/relay-tools/react-relay-network-modern/tree/master tab=readme-ov-file#example-of-injecting-networklayer-with-middlewares-on-the-client-side)

import { createRelayMiddleware } from '@openreplay/tracker-graphql'

const trackerMiddleware = createRelayMiddleware(tracker)

const network = new RelayNetworkLayer([
  // your middleware
  // ,
  trackerMiddleware
])

O puedes colocar manualmente la llamada a recordGraphQL en la implementación de NetworkLayer. Si usas la forma estándar Network.create para implementarlo, deberías hacer algo como lo siguiente:

import { createGraphqlMiddleware } from '@openreplay/tracker-graphql'; // see above for recordGraphQL definition
import { Environment } from 'relay-runtime';

const handler = createGraphqlMiddleware(tracker)

function fetchQuery(operation, variables, cacheConfig, uploadables) {
  return fetch('www.myapi.com/resource', {
    // ...
  })
    .then(response => response.json())
    .then(result =>
        handler(
          // op kind, name, variables, response, duration (default 0)
          operation.operationKind,
          operation.name,
          variables,
          result,
          duration,
        ),
    );
}

const network = Network.create(fetchQuery);

Consulta Relay Network Layer para más detalles.

Para Apollo deberías crear un nuevo ApolloLink.

import { createTrackerLink } from '@openreplay/tracker-graphql'

const trackerLink = createTrackerLink(tracker);
const yourLink = new ApolloLink(trackerLink)

Como alternativa, puedes usar el handler genérico de graphql:

import { createGraphqlMiddleware } from '@openreplay/tracker-graphql'; // see above for recordGraphQL definition
import { ApolloLink } from 'apollo-link';

const handler = createGraphqlMiddleware(tracker)

const trackerApolloLink = new ApolloLink((operation, forward) => {
  return forward(operation).map(result =>
    handler(
      // op kind, name, variables, response, duration (default 0)
      operation.query.definitions[0].operation,
      operation.operationName,
      operation.variables,
      result,
    ),
  );
});

const link = ApolloLink.from([
  trackerApolloLink,
  // ...
]);

Consulta Apollo Link y Apollo Networking para más detalles.

Si buscas un ejemplo práctico de cómo usar este plugin para capturar datos de operaciones (mutaciones y consultas) en tus reproducciones de sesiones, consulta nuestro tutorial detallado aquí.

¿Tienes problemas para configurar este plugin? Conéctate a nuestro Slack o consulta nuestro Foro y obtén ayuda de nuestra comunidad.