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