0.6.7 • Published 3 years ago
apollo-graphql-datasource v0.6.7
apollo-graphql-datasource
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
npm i apollo-graphql-datasource --saveUsage
Define a data source by creating new the GraphQLDataSource instance. The below example will create a GraphQL datasource to the Apollo Federation Demo gateway. In the real world project, your schema may conflict with the destination schema. Therefore, a prefix should be added to the destination schema types, in this example: Demo0
const GraphQLDataSource = require('appolo-graphql-datasource');
const { gql } = require('apollo-server');
const typeDefs = `
  type Demo0Product {
    upc: String!
    name: String
    price: Int
    weight: Int
    reviews: [Demo0Review]
    inStock: Boolean
    shippingEstimate: Int
    calulatedField(inputArgs: SomeInput): Int
    calulatedField2(inputArgs: SomeInput!): CalulatedField2Response
  }
  type Demo0Review {
    id: ID!
    body: String
    author: Demo0User
    product: Demo0Product
  }
  type Demo0User {
    id: ID!
    name: String
    username: String
    reviews: [Demo0Review]
  }
  enum ProductEnum {
    VALUE_1
    VALUE_2
  }
  input SomeInput {
    args1: Int
    args2: String!
  }
  type CalulatedField2Response {
    value1: Int
    value2: Int
    value3: String
  }
  type Query {
    Demo0me: Demo0User
    Demo0topProducts(first: Int = 5, status: ProductEnum): [Demo0Product]
  }
  type Mutation {
    Demo0doSth(first: Int = 5): [Demo0Product]
  }
`;
const dataSource = new GraphQLDataSource(
  'http://federation.gateway.url/',
  typeDefs,
  'Demo0',
);
module.exports = () => ({
  demoFederationAPI: dataSource,
});GraphQL Operations
- The queryandmutationmethods on theGraphQLDataSourcemake a request to the GraphQL server. The datasource will foward the client's query to the destination server.
- The queryandmutationmethods accepts a second parameter,options, which can be used to pass the additional headers.
- The datasource also handles:- mutiple queriesormutationsin one request
- fragment
- enum
- fields with arguments
 
- mutiple 
function genericQuery(parent, args, context, info) {
  const { demoFederationAPI } = context.dataSources;
  const { secretToken } = context;
  const headers = {
    serviceSecret: secretToken,
  };
  return demoFederationAPI.query(info, { headers });
}
module.exports = {
  Query: {
    Demo0topProducts: (...params) => genericQuery(...params),
    // ...others queries
  }
}Transform Types to Scalar
If you want to transform some types to scalar, provide them in constructor
const dataSource = new GraphQLDataSource(
  'http://federation.gateway.url/',
  typeDefs,
  'Demo0',
  ['calulatedField2'], // provide Types to transform
);0.6.7
3 years ago