首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从导致突变失败的graphql响应中删除`__typename`字段

GraphQL是一种用于API的查询语言和运行时环境,它可以通过单个请求来获取多个数据源的数据。在GraphQL的响应中,__typename字段是一个特殊字段,用于标识返回数据的类型。有时候,如果GraphQL响应中包含了__typename字段,但是它并不是我们所期望的,我们可能需要删除它。

要从导致突变失败的GraphQL响应中删除__typename字段,可以通过以下几个步骤实现:

  1. 解析响应:首先,需要解析GraphQL的响应,将其转换为可操作的数据结构。这可以使用GraphQL客户端库(如Apollo Client、Relay等)提供的工具函数或自定义代码来完成。
  2. 遍历响应:遍历解析后的响应数据结构,查找并删除所有的__typename字段。这可以通过递归遍历对象和数组,并删除匹配的字段来实现。
  3. 更新响应:在遍历的过程中,对于每个匹配的__typename字段,可以直接删除它,或者将其设置为nullundefined,或者根据具体需求进行其他操作。
  4. 重新序列化响应:完成更新后,将响应数据结构重新序列化为GraphQL的响应格式,以便于后续的处理或传输。

下面是一个示例代码片段,演示了如何使用JavaScript和Apollo Client库从导致突变失败的GraphQL响应中删除__typename字段:

代码语言:txt
复制
import { visit, BREAK } from 'graphql';

function removeTypenameField(response) {
  visit(response, {
    Field: {
      enter(node) {
        if (node.name.value === '__typename') {
          // 删除__typename字段
          return BREAK;
        }
      },
    },
  });
  
  return response;
}

// 假设response为导致突变失败的GraphQL响应
const mutatedResponse = {
  data: {
    __typename: 'Mutation',
    // 其他字段...
  },
};

const cleanedResponse = removeTypenameField(mutatedResponse);
console.log(cleanedResponse);

以上示例代码中,removeTypenameField函数接收一个GraphQL响应对象,并使用visit函数遍历响应数据结构的每个字段。如果发现字段名为__typename,则返回BREAK,从而删除了__typename字段。最后,将处理后的响应数据结构打印到控制台。

需要注意的是,这只是一个简化的示例代码,实际情况下可能需要根据具体的响应结构和需求进行相应的修改和优化。

推荐的腾讯云相关产品和产品介绍链接地址:

以上是关于如何从导致突变失败的GraphQL响应中删除__typename字段的完善且全面的答案,希望对您有帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • AI网络爬虫:用GraphQL查询爬取动态网页数据

    {"operationName":"GetClassesQuery","variables":{"query":"ChatGPT","where":{"level":["ALL_LEVELS","BEGINNER","INTERMEDIATE","ADVANCED"]},"analyticsTags":["src:browser","src:browser:search","disc_cls_idx_mig","user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"],"after":"191","first":24},"query":"fragment ClassFields on Class {\n badges {\n type\n __typename\n }\n durationInSeconds\n id\n publishTime\n largeCoverUrl\n sku\n sourceLanguage\n studentCount\n teacher {\n id\n name\n username\n vanityUsername\n __typename\n }\n title\n url\n viewer {\n hasSavedClass\n __typename\n }\n __typename\n}\n\nquery GetClassesQuery($query: String!, $where: SearchFiltersV2!, $analyticsTags: [String!], $after: String!, $first: Int!, $sort: SortParameters) {\n search: searchV2(query: $query, where: $where, analyticsTags: $analyticsTags, after: $after, first: $first, sort: $sort) {\n totalCount\n searchId\n algorithmId\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n __typename\n }\n edges {\n cursor\n node {\n ...ClassFields\n __typename\n }\n __typename\n }\n __typename\n }\n}\n"}

    01

    GraphQL是API的未来,但它并非银弹

    我认为,GraphQL 将改变世界。将来,你可以使用 GraphQL 查询世界上的任何系统。我在创造这样的未来。那么我为什么要对使用 GraphQL 进行辩驳呢?我个人最讨厌的是,社区一直在宣传 GraphQL 的好处,而这些好处却非常普通,并且与 GraphQL 实际上没有任何关系。如果我们想推广采用,那么我们应该诚实,应该摘掉有色眼镜。这篇文章是对 Kyle Schrade 的文章“为什么使用 GraphQL”的回应。这并不是批评。这篇文章是一个很好的讨论基础,因为它代表了我在社区中经常听到的观点。如果你读了整篇文章,当然这会花一些时间,你就会完全理解,为什么我认为 Kyle 的文章应该改名为“为什么使用 Apollo”。

    01
    领券