使用GitHub';s GraphQLAPI,如何判断谁关闭了问题或请求?

使用GitHub';s GraphQLAPI,如何判断谁关闭了问题或请求?,graphql,github-api,Graphql,Github Api,给定一个问题或请求编号,我希望通过一次查询获得以下信息: 无论是问题还是请求 问题状态(打开、关闭)或请购单状态(打开、关闭、合并) 如果问题或PR已关闭,由谁关闭,何时关闭 如果问题或公关被合并,由谁合并,何时合并 通过以下查询,我已完成了所有这些工作,但无法确定是谁关闭了问题或PR: { repository(owner: "Automattic", name: "wp-calypso") { issueOrPullRequest(number: 23226) {

给定一个问题或请求编号,我希望通过一次查询获得以下信息:

  • 无论是问题还是请求
  • 问题状态(打开、关闭)或请购单状态(打开、关闭、合并)
  • 如果问题或PR已关闭,由谁关闭,何时关闭
  • 如果问题或公关被合并,由谁合并,何时合并
通过以下查询,我已完成了所有这些工作,但无法确定是谁关闭了问题或PR:

{
  repository(owner: "Automattic", name: "wp-calypso") {
    issueOrPullRequest(number: 23226) {
      __typename
      ... on Closable {
        closed
        closedAt
        # TODO: How to get ClosedEvent { actor } ?
      }
      ... on Issue {
        issueState: state
        title
      }
      ... on PullRequest {
        prState: state
        title
        merged
        mergedAt
        mergeCommit {
          committer {
            user {
              login
            }
          }
        }
      }
    }
  }
}
我正在使用GitHub的GraphQL资源管理器工具运行此查询:

我可以把这个问题或公关看作是一个问题,但我认为我需要从那里一直到最后一个影响到这个对象的问题。这是我还没弄明白的部分

在GitHub的V3RESTAPI中,确定所有这些信息可能需要2个请求。对于已关闭的拉取请求(非合并的拉取请求),只有当请求拉取请求作为一个问题(通过API调用)时,
关闭方
字段才会出现。所有其他拉取请求信息都可以通过API调用获得。

一种迂回(且难看)的方法可以找到解决问题的参与者,如下所示(受此启发)。我希望有更好的办法,但现在有一个办法

诀窍是在给定的时间线中查询大量事件(如果您绝对确定某个问题/PR关闭后没有评论,您可以说
时间线(last:1)
),在其中查找
ClosedEvent
MergedEvent
,并提取
参与者

{
  repository(owner: "Automattic", name: "wp-calypso") {
    issueOrPullRequest(number: 23226) {
      __typename
      ... on Closable {
        closed
        closedAt
      }
      ... on Issue {
        timeline(last: 100) {
          edges {
            node {
              __typename
              ... on ClosedEvent {
                actor{
                  login
                }
              }
            }
          }
        }
      }
      ... on PullRequest {
        timeline(last: 100) {
          edges {
            node {
              __typename
              ... on MergedEvent {
                actor{
                  login
                }
              }
            }
          }
        }
      }
    }
  }
}

感谢指向
时间线
字段的指针,我想这就是我在这里丢失的连接。但是,建议的查询最终会非常冗长,以涵盖最常见的可能性,并且在某些情况下(如果问题或PR在关闭或合并后有许多评论或其他事件),它仍然会失败。操作此响应对象所需的代码也远比向RESTAPI发出2个请求复杂得多。我承认这个解决方案是正确的,但我认为总体答案是“使用GraphQLAPI这个任务是不可行的”。@jnylen我同意。这将是很好的,有一个简洁的方式来完成这件事。另外,关于代码解析的复杂性,它是否仍然比通过网络进行2次调用便宜?我还没有做过基准测试,所以我不确定,这只是一个值得深思的权衡。。。1个网络请求,在服务器端具有非常复杂的查询和未知的复杂性,这并不总是有效,并且需要客户端进行复杂的处理(难以测试)。或者,对标准对象的2个相对简单的网络请求,之后再进行一些组合。老实说,我对这两种GitHub API的行为都有点失望。