What is apollo-link?
The apollo-link package provides a standard interface for modifying control flow of GraphQL requests and fetching GraphQL results. It is part of the Apollo ecosystem and allows developers to create a chain of link objects to handle GraphQL operations. This modular approach enables fine-grained control over the request/response cycle in a composable way.
What are apollo-link's main functionalities?
Middleware functionality
This feature allows developers to modify requests before they are sent to the server. In the code sample, a middleware link is created that injects an authorization token into the headers of each request.
import { ApolloLink } from 'apollo-link';
const middlewareLink = new ApolloLink((operation, forward) => {
operation.setContext({ headers: { authorization: getAuthToken() } });
return forward(operation);
});
Error handling
This feature allows developers to handle errors that occur during the GraphQL operation. The code sample demonstrates how to catch and process errors before they propagate further.
import { ApolloLink, Observable } from 'apollo-link';
const errorLink = new ApolloLink((operation, forward) => {
return new Observable(observer => {
const sub = forward(operation).subscribe({
next: observer.next.bind(observer),
error: error => {
handleError(error);
observer.error(error);
},
complete: observer.complete.bind(observer)
});
return () => sub.unsubscribe();
});
});
Afterware functionality
This feature allows developers to modify responses returned from the server. In the code sample, an afterware link is used to check for server errors after a response is received but before it is processed further.
import { ApolloLink } from 'apollo-link';
const afterwareLink = new ApolloLink((operation, forward) => {
return forward(operation).map(response => {
checkForServerErrors(response);
return response;
});
});
Other packages similar to apollo-link
relay-runtime
Relay Runtime is a framework from Facebook for building data-driven React applications with GraphQL. It is similar to apollo-link in that it manages GraphQL data operations, but it is tightly integrated with React and uses a different set of abstractions and optimizations specific to React applications.
urql
Urql is a highly customizable and versatile GraphQL client, similar to apollo-link. It features a similar extensible approach with 'exchanges' which are analogous to Apollo's links. However, urql provides a more integrated caching mechanism and a simpler API, which might be preferred for smaller projects or those seeking simplicity.