GraphQL
Questo plugin ti consente di catturare le richieste GraphQL e di ispezionarle in seguito durante la riproduzione delle registrazioni delle sessioni. È molto utile per comprendere e risolvere i problemi. Il plugin GraphQL è compatibile con le implementazioni di Apollo e Relay.
Installazione
Section titled Installazionenpm i @openreplay/tracker-graphql
Utilizzo
Section titled UtilizzoInizializza il pacchetto @openreplay/tracker come al solito e carica al suo interno il plugin. La chiamata a plugin restituirà una funzione che riceve le variabili operationKind, operationName, variables, result e duration (predefinita a 0) e restituisce result senza modifiche.
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 usi gli strumenti di rete di Relay, puoi semplicemente creare un middleware
import { createRelayMiddleware } from '@openreplay/tracker-graphql';
const trackerMiddleware = tracker.use(createRelayMiddleware());
const network = new RelayNetworkLayer([
// your middleware
// ,
trackerMiddleware,
]);
Puoi passare una funzione Sanitizer a createRelayMiddleware per sanificare le variabili e i dati prima di inviarli a OpenReplay.
const trackerLink = tracker.use(
createRelayMiddleware((variables) => {
return {
...variables,
password: '***',
};
}),
);
In alternativa, puoi inserire manualmente la chiamata a recordGraphQL nell’implementazione di NetworkLayer. Se usi il metodo standard Network.create per implementarla, dovrai fare qualcosa di simile a quanto segue:
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);
Consulta Relay Network Layer per maggiori dettagli.
Apollo
Section titled ApolloPer Apollo devi creare un nuovo ApolloLink:
import { createTrackerLink } from '@openreplay/tracker-graphql';
const trackerLink = tracker.use(createTrackerLink());
const yourLink = new ApolloLink(trackerLink);
Puoi passare una funzione Sanitizer a createRelayMiddleware per sanificare le variabili e i dati prima di inviarli a OpenReplay.
const trackerLink = tracker.use(
createTrackerLink((variables) => {
return {
...variables,
password: '***',
};
}),
);
In alternativa, puoi usare l’handler graphql generico:
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,
// ...
]);
Consulta Apollo Link e Apollo Networking per maggiori dettagli.
Tutorial
Section titled TutorialSe cerchi un esempio pratico di come usare questo plugin per catturare i dati delle operazioni (mutazioni e query) nelle registrazioni delle tue sessioni, dai un’occhiata al nostro tutorial dettagliato qui.
Hai domande?
Section titled Hai domande?Hai difficoltà a configurare questo plugin? Unisciti al nostro Slack e ricevi aiuto dalla nostra community.