Skip to content

graphql-directive-retry

Source location - lifeomic/graphql-directive-retry

npm Greenkeeper badge Build Status Coverage Status

Instead of adding retry logic inside the resolver implementation, use this schema directive to add retry declaratively

Usage

const {
    retryDirective,
    retryDeclaration,
} = require('@lifeomic/graphql-directive-retry');
const { makeExecutableSchema } = require('graphql-tools');
const { graphql } = require('graphql');

const typeDefs = `
  ${retryDeclaration('retry')}

  type Query {
    flakyFunction(arg: String!): String! @retry(maxTimeout: 100)
  }
`;

const schema = makeExecutableSchema({
    typeDefs,
    resolvers,

    schemaDirectives: {
        retry: retryDirective,
    },
});

Customizing timeout behavior

This directive is based on promise-retry and you can use the same configuration options.

Field Config

You can configure retry behavior on a per-field basis like this:

type Query {
  flakyFunction(arg: String!): String!
    @retry(retries: 1, minTimeout: 100, maxTimeout: 200, factor: 1.1)
}

Global Config

You can configure the default retry behavior for all resovlers with a retry directive by providing the configuration in the execution context. Here is an example:

const response = await graphql(
  yourSchema,
  yourQuery,
  rootObject,
  {
    ... yourContext
    retryDirectiveConfig: {
      retries: 0
    }
  },
  {}
);

Last update: July 12, 2020