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

Github GrapQL接口只返回每个上下文的最后一个StatusContext

基础概念

GitHub GraphQL API 是 GitHub 提供的一个强大的查询接口,允许开发者通过 GraphQL 查询语言来获取仓库、用户、组织等数据。GraphQL 是一种用于 API 的查询语言,它允许客户端请求所需的数据结构,而不是像 REST API 那样返回固定的数据结构。

问题描述

你提到的问题是 GitHub GraphQL API 只返回每个上下文的最后一个 StatusContext。这通常是因为 GraphQL 查询的设计方式导致的。

原因分析

在 GraphQL 查询中,如果你请求了一个对象的多个字段,并且这些字段有相同的子字段,GraphQL 默认只会返回最后一个请求的子字段的值。这是因为 GraphQL 查询是基于请求的字段顺序来解析的。

解决方法

要解决这个问题,你需要确保每个 StatusContext 都被单独请求。以下是一个示例查询,展示了如何正确请求多个 StatusContext

代码语言:txt
复制
query {
  repository(owner: "ownerName", name: "repoName") {
    commit(statuses: first: 10) {
      nodes {
        statusContexts {
          context
          description
        }
      }
    }
  }
}

在这个查询中,statusContexts 字段被单独请求,确保每个 StatusContext 都会被返回。

示例代码

以下是一个使用 JavaScript 和 Apollo Client 进行 GraphQL 查询的示例代码:

代码语言:txt
复制
const { ApolloClient, InMemoryCache, gql } = require('apollo-boost');

const client = new ApolloClient({
  uri: 'https://api.github.com/graphql',
  headers: {
    'Authorization': `Bearer YOUR_GITHUB_TOKEN`
  },
  cache: new InMemoryCache()
});

const GET_COMMIT_STATUSES = gql`
  query {
    repository(owner: "ownerName", name: "repoName") {
      commit(statuses: first: 10) {
        nodes {
          statusContexts {
            context
            description
          }
        }
      }
    }
  }
`;

client.query({ query: GET_COMMIT_STATUSES })
  .then(result => console.log(result))
  .catch(error => console.error(error));

参考链接

通过这种方式,你可以确保每个 StatusContext 都被正确返回,而不是只返回最后一个。

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

相关·内容

  • Golang语言情怀-第54期 Go 语言标准库翻译 context

    包上下文定义了上下文类型,它携带跨越API边界和进程之间的最后期限、取消信号和其他请求范围的值。对服务器的传入请求应该创建上下文,对服务器的传出调用应该接受上下文。它们之间的函数调用链必须传播上下文,可以选择用使用WithCancel、WithDeadline、WithTimeout或WithValue创建的派生上下文替换它。当一个上下文被取消时,所有从它派生的上下文也被取消。WithCancel、WithDeadline和WithTimeout函数接受上下文(父类),并返回派生的上下文(子类)和CancelFunc。调用CancelFunc会取消子进程及其子进程,删除父进程对子进程的引用,并停止任何相关的计时器。没有调用CancelFunc会泄露子进程及其子进程,直到父进程被取消或者定时器被触发。go vet工具检查取消函数是否在所有控制流路径上使用。使用上下文的程序应该遵循以下规则,以保持跨包的接口一致,并允许静态分析工具检查上下文传播:不要在结构类型中存储上下文;相反,将上下文显式地传递给每个需要它的函数。Context应该是第一个参数,通常命名为ctx:

    05

    如何自动转发接收的请求报头?

    了解OpenTelemetry的朋友应该知道,为了将率属于同一个请求的多个操作(Span)串起来,上游应用会生成一个唯一的TraceId。在进行跨应用的Web调用时,这个TraceId和代表跟踪操作标识的SpanID一并发给目标应用,W3C还专门指定了一份名为Trace Context的标准,该标准确定了一个名为trace-parent的请求报头来传递TraceId、(Parent)SpanID以及其他两个跟踪属性。其实我们的应用也可能会使用到分布式跟踪这种类似的功能,我们需要在某个应用中添加一些“埋点”,当它调用另一个应用时,这些埋点会自动添加到请求的报头集合中,从而实现在整个调用链中自动传递。为了实现这个功能,我创建了一个名为HeaderForwarder(Github)的框架。本文不会介绍HeaderForwarder的设计,仅仅介绍它的使用方式,有兴趣的朋友可以查看源代码。

    03
    领券