GraphQL
Este plugin permite capturar requisições GraphQL e inspecioná-las depois ao reproduzir as gravações de sessões. Isso é muito útil para entender e corrigir problemas. O plugin GraphQL é compatível com as implementações do Apollo e do Relay.
Instalação
Section titled Instalaçãonpm i @openreplay/tracker-graphql
Inicialize o pacote @openreplay/tracker normalmente e carregue o plugin nele. A chamada de plugin retornará a função, que recebe as variáveis operationKind, operationName, variables, result e duration (padrão 0) e retorna result sem alterações.
import Tracker from '@openreplay/tracker';
import { createGraphqlMiddleware } from '@openreplay/tracker-graphql';
const tracker = new Tracker({
projectKey: YOUR_PROJECT_KEY,
});
export const recordGraphQL = tracker.use(createGraphqlMiddleware());
Relay
Section titled RelaySe você usa as ferramentas de rede do Relay, basta criar um middleware
import { createRelayMiddleware } from '@openreplay/tracker-graphql';
const trackerMiddleware = tracker.use(createRelayMiddleware());
const network = new RelayNetworkLayer([
// your middleware
// ,
trackerMiddleware,
]);
Você pode passar uma função Sanitizer para createRelayMiddleware para sanitizar as variáveis e os dados antes de enviá-los ao OpenReplay.
const trackerLink = tracker.use(
createRelayMiddleware((variables) => {
return {
...variables,
password: '***',
};
}),
);
Ou você pode colocar manualmente a chamada recordGraphQL na implementação do NetworkLayer. Se você usa a forma padrão com Network.create para implementá-lo, faça algo como o exemplo abaixo:
import { createGraphqlMiddleware } from '@openreplay/tracker-graphql'; // see above for recordGraphQL definition
import { Environment } from 'relay-runtime';
const handler = tracker.use(createGraphqlMiddleware());
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);
Consulte Relay Network Layer para mais detalhes.
Apollo
Section titled ApolloPara o Apollo, você deve criar um novo ApolloLink:
import { createTrackerLink } from '@openreplay/tracker-graphql';
const trackerLink = tracker.use(createTrackerLink());
const yourLink = new ApolloLink(trackerLink);
Você pode passar uma função Sanitizer para createRelayMiddleware para sanitizar as variáveis e os dados antes de enviá-los ao OpenReplay.
const trackerLink = tracker.use(
createTrackerLink((variables) => {
return {
...variables,
password: '***',
};
}),
);
Como alternativa, você pode usar o handler genérico do graphql:
import { createGraphqlMiddleware } from '@openreplay/tracker-graphql'; // see above for recordGraphQL definition
import { ApolloLink } from 'apollo-link';
const handler = tracker.use(createGraphqlMiddleware());
const trackerApolloLink = new ApolloLink((operation, forward) => {
operation.setContext({ start: performance.now() });
return forward(operation).map((result) => {
const time = performance.now() - operation.getContext().start;
return handler(
// op kind, name, variables, response, duration (default 0)
operation.query.definitions[0].operation,
operation.operationName,
operation.variables,
result,
time,
);
});
});
const link = ApolloLink.from([
trackerApolloLink,
// ...
]);
Consulte Apollo Link e Apollo Networking para mais detalhes.
Tutorial
Section titled TutorialSe você procura um exemplo prático de como usar este plugin para capturar dados de operações (mutations e queries) nos seus session replays, confira nosso tutorial detalhado aqui.
Tem dúvidas?
Section titled Tem dúvidas?Está com dificuldade para configurar este plugin? Conecte-se ao nosso Slack e receba ajuda da nossa comunidade.