I am trying to use apollo-link-rest with the Star Wars API and I am getting some errors.
import { InMemoryCache } from "apollo-cache-inmemory";
import { ApolloClient } from "apollo-client";
import { RestLink } from "apollo-link-rest";
import gql from "graphql-tag";
// node environment?
const fetch = require("node-fetch");
global.fetch = fetch;
global.Headers = fetch.Headers;
const restLink = new RestLink({
endpoints: { swapi: "https://swapi.co/api/" }
});
const client = new ApolloClient({
link: restLink,
cache: new InMemoryCache()
});
const query = gql`
query people {
search
@rest(type: "Search", path: "people/?search=skywalker", endpoint: swapi) {
count
results {
name
}
}
}
`;
client
.query({ query })
.then(response => console.log(JSON.stringify(response)))
.catch(err => console.log(err));
Errors:
Missing field __typename in {
"name": "Luke Skywalker"
}
Missing field __typename in {
"name": "Anakin Skywalker"
}
Missing field __typename in {
"name": "Shmi Skywalker"
}
I know I can change set this InMemoryCache({ addTypename: false }) to remove the errors, but I don't know what the impact on caching will be if I set addTypename to false.
Can someone point me in the right direction on this?
Cheers!
Check out what the docs have to say about typename patching.
Your
@restdirective tells the client what typename to expect for thesearchfield, but doesn't say anything about any types inside the field's selection set. There's two ways to fix that. You can use a@typedirective:Or configure a
typePatcher. Something like: