apollo-datasource-graphql

GraphQL/Apollo DataSource to connect to GraphQL API's from your Apollo Server

Showing:

Popularity

Downloads/wk

1.2K

GitHub Stars

79

Maintenance

Last Commit

2yrs ago

Contributors

2

Package

Dependencies

10

Size (min+gzip)

46.2KB

License

MIT

Type Definitions

Tree-Shakeable

No?

Categories

Readme

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

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100