1.3.2 • Published 5 years ago

apollo-datasource-graphql v1.3.2

Weekly downloads
1,327
License
MIT
Repository
github
Last release
5 years ago

apollo-datasource-graphql

Connect your GraphQL server to an existing GraphQL API using DataSources.

Note: This is designed to work with Apollo Server 2.0 and Data Sources

GraphQL Data Source

Install

yarn add apollo-datasource-graphql

or

npm i apollo-datasource-graphql --save

Usage

Define a data source by extending the GraphQLDataSource class. You can then implement the queries and mutations that your resolvers require.

import { GraphQLDataSource } from 'apollo-datasource-graphql';
import { gql } from 'apollo-server-express';

const CRAFT_BEERS = gql`
  query {
    craftBeers {
      name
      style
      abv
      brewery {
        name
      }
    }
  }
`;

export class CraftBeerGraphQLAPI extends GraphQLDataSource {
  baseURL = 'https//craft-beer-api.example/graphql';

  async getCraftBeers() {
    try {
      const response = await this.query(CRAFT_BEERS);

      return response.data.craftBeers;
    } catch (error) {
      console.error(error);
    }
  }
}

GraphQL Operations

The query and mutation methods on the GraphQLDataSource make a request to the GraphQL server. Both accepts a second parameter, options, which can be used to pass variables, context, etc.

async searchCraftBeerByName(name) {
  try {
    const response = await this.query(CRAFT_BEERS, {
      variables: {
        name,
      },
    });

    return response.data.craftBeer;
  } catch (error) {
    console.error(error);
  }
}
ParameterDescriptionRequired
graphQLDocumentA GraphQL documenttrue
optionsAn object that defines options to pass with the GraphQL requestfalse
OptionsDescriptionRequired
variablesA GraphQL documentfalse
operationNameA string name of the query if it is named, otherwise it is nullfalse
contextMetadata to be passed between Apollo Linksfalse
extensionsA map to store extensions data to be sent to the serverfalse

Intercepting Operations

You can intercept the request to set headers on an outgoing request. Since Apollo Data Sources have access to GraphQL context, you can store a user token or other information you need to have available when making a request.

Add the method willSendRequest to your class which will receive the request object. Here, you can modify the request to meet your needs.

  willSendRequest(request) {
    const { accessToken } = this.context;

    if (!request.headers) {
      request.headers = {};
    }
    
    request.headers.authorization = accessToken;
  }

TODO

  • Complete README
  • Mutation method
  • Test Suite
  • Request caching