Cleaning Unwanted Fields From GraphQL Responses

后端 未结 3 1490
梦如初夏
梦如初夏 2020-12-09 04:49

I have an object that my GraphQL client requests.

It\'s a reasonably simple object:

type Element {
    content: [ElementContent]
    elementId: Strin         


        
3条回答
  •  甜味超标
    2020-12-09 05:09

    There are three ways of doing this

    First way

    Update the client parameter like this it will omit the unwanted fields in graphql.

    apollo.create({
      link: http,
      cache: new InMemoryCache({
        addTypename: false
      })
    });

    Second Way

    By using the omit-deep package and use it as a middleware

    const cleanTypeName = new ApolloLink((operation, forward) => {
      if (operation.variables) {
    
        operation.variables = omitDeep(operation.variables,'__typename')
      }
      return forward(operation).map((data) => {
        return data;
      });
    });
    

    Third Way

    Creating a custom middleware and inject in the apollo

    const cleanTypeName = new ApolloLink((operation, forward) => {
      if (operation.variables) {
        const omitTypename = (key, value) => (key === '__typename' ? undefined : value);
        operation.variables = JSON.parse(JSON.stringify(operation.variables), omitTypename);
      }
      return forward(operation).map((data) => {
        return data;
      });
    });
    

    and inject the middleware

    const httpLinkWithErrorHandling = ApolloLink.from([
      cleanTypeName,
      retry,
      error,
      http,
    ]);
    

    Preferred method is Third Way Because it does not have any third pary dependency and no cache performance issues

提交回复
热议问题