Query existing REST services with GraphQL
npm install apollo-link-rest---
title: REST Link
---
> The Apollo Link Rest library is maintained by Apollo community members and not an Apollo GraphQL maintained library. For information on progress check out the issues or the design. We would love your help with writing docs, testing, anything! We would love for you, yes you, to be a part of the Apollo community!
``bash`
npm install apollo-link-rest @apollo/client graphql qs --save
or
yarn add apollo-link-rest @apollo/client graphql qs
@apollo/client, graphql, and qs are peer dependencies needed by apollo-link-rest.
`js
import { RestLink } from "apollo-link-rest";
// Other necessary imports...
// Create a RestLink for the REST API
// If you are using multiple link types, restLink should go before httpLink,
// as httpLink will swallow any calls that should be routed through rest!
const restLink = new RestLink({
uri: 'https://swapi.co/api/',
});
// Configure the ApolloClient with the default cache and RestLink
const client = new ApolloClient({
link: restLink,
cache: new InMemoryCache(),
});
// A simple query to retrieve data about the first person
const query = gql
query luke {
person @rest(type: "Person", path: "people/1/") {
name
}
};
// Invoke the query and log the person's name
client.query({ query }).then(response => {
console.log(response.data.person.name);
});
`

For an example of using REST Link with Apollo Client and React Apollo view this CodeSandbox:

For an example of using REST Link with Apollo Client, React Apollo and TypeScript view this CodeSandbox:

REST Link takes an object with some options on it to customize the behavior of the link. The options you can pass are outlined below:
- uri: the URI key is a string endpoint (optional when endpoints provides a default)endpoints
- : root endpoint (uri) to apply paths to or a map of endpointscustomFetch
- : a custom fetch to handle REST callsheaders
- : an object representing values to be sent as headers on the requestcredentials
- : a string representing the credentials policy you want for the fetch callfieldNameNormalizer
- : function that takes the response field name and converts it into a GraphQL compliant name
REST Link uses the headers field on the context to allow passing headers to the HTTP request. It also supports the credentials field for defining credentials policy.
- headers: an object representing values to be sent as headers on the requestcredentials
- : a string representing the credentials policy you want for the fetch call
For a complete apollo-link-rest reference visit the documentation website at: https://www.apollographql.com/docs/link/links/rest.html
This project uses TypeScript to bring static types to JavaScript and uses Jest for testing. To get started, clone the repo and run the following commands:
`bashyarn
npm install # or
npm test # or yarn test to run tests
npm test -- --watch # run tests in watch mode
npm run check-types # or yarn check-types to check TypeScript types`
To run the library locally in another project, you can do the following:
`bash
npm link
- JSON API Link provides
tooling for using GraphQL with JSON API compliant APIs.
- apollo-type-patcher declarative type definitions for your REST API with zero dependencies.