Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Github 通用pull_请求事件和其他更具体的pull_请求事件(如pull_request.opened)的重要性_Github_Github Api_Probot_Github App - Fatal编程技术网

Github 通用pull_请求事件和其他更具体的pull_请求事件(如pull_request.opened)的重要性

Github 通用pull_请求事件和其他更具体的pull_请求事件(如pull_request.opened)的重要性,github,github-api,probot,github-app,Github,Github Api,Probot,Github App,我正在使用nodejs和probot框架开发一个GitHub应用程序。我可以看到probot框架的应用程序类包含以下事件: > event: "pull_request" | "pull_request.assigned" | > "pull_request.closed" | "pull_request.edited" | "pull_request.labeled" > | "pull_request.opened" | "pull_request.reopened" |

我正在使用nodejs和probot框架开发一个GitHub应用程序。我可以看到probot框架的应用程序类包含以下事件:

> event: "pull_request" | "pull_request.assigned" |
> "pull_request.closed" | "pull_request.edited" | "pull_request.labeled"
> | "pull_request.opened" | "pull_request.reopened" |
> "pull_request.review_request_removed" |
> "pull_request.review_requested" | "pull_request.unassigned" |
> "pull_request.unlabeled" | "pull_request.synchronize
我注意到,当单击CreatePullRequest按钮时,就会触发pull_请求和Pullu request.opened事件

为了理解在单击同一按钮时触发多个看似相似的事件的行为,我尝试重新打开一个已关闭的请求,并打印出pull_request事件和pull_request.reopened事件的上下文对象

我对两个上下文进行了差异比较,发现两个事件返回的上下文都是 相同,但pull_请求事件的上下文包含以下附加属性:

merged: false,
        mergeable: null,
        rebaseable: null,
        mergeable_state: 'unknown',
        merged_by: null,
        comments: 6,
        review_comments: 0,
        maintainer_can_modify: false,
        commits: 1,
        additions: 1,
        deletions: 0,
        changed_files: 1 },
     repository:
      { id: 123456789,
        node_id: '',
        name: '',
        full_name: '',
        private: true,
        owner: [Object],
        html_url: 'some-url-here'
        .
        .
        ///////////////////--------many more urls-------//////////////////////
        created_at: '2020-04-0',
        updated_at: '2020-04-0',
我们知道返回的上下文对象的一般格式如下:

Context {
  name: 'pull_request',
  id: '187128937812-8219-89891892133-16752-1234576765545',
  payload:
   { action: 'reopened',
     number: 1,
     pull_request:
      { url:
        .
        .
        .and so on.......
app.on('pull_request', async context => {
    console.log('---------------------- on pull_request event')
    console.log('Context returned :----', context)
  })
上述信息在两种情况下都存在。我们可以看到,这还告诉我们所执行的特定操作,这由context.payload.action表示。因此,如果某人的需求是获得pull_请求。打开,他/她可以通过使用pull_请求事件来实现,如下所示:

Context {
  name: 'pull_request',
  id: '187128937812-8219-89891892133-16752-1234576765545',
  payload:
   { action: 'reopened',
     number: 1,
     pull_request:
      { url:
        .
        .
        .and so on.......
app.on('pull_request', async context => {
    console.log('---------------------- on pull_request event')
    console.log('Context returned :----', context)
  })
并且不需要关心其他更具体的事件Shere pull_request.opened,即除了通过上述代码实现的功能外,以下代码不会提供真正的额外帮助:

app.on('pull_request.opened', async context => {
    console.log('---------------------- on pull_request.opened')
    console.log('Context returned :----', context)
  })
这就是困扰我的问题: 如果pull_request事件的其他特定形式(如pull_request.Responsed)不包含不同的信息,那么pull_request事件的目的是什么?更准确地说,如果它们的上下文不包含不同的信息

我很肯定,这背后确实有一些智慧。我在互联网上找不到任何东西,在文档中也找不到任何可以解释这一点的东西

请帮助我理解隐藏的智慧

编辑1:开始

忘记提及一个观察结果,即:重新打开pull请求也会触发issue_comment.created事件。因此,一个ActionClickingCreatePull请求会触发三个事件

编辑2:开始

如果pull_request事件的其他特定形式(如pull_request.Responsed)不包含不同的信息,那么pull_request事件的目的是什么?更准确地说,如果它们的上下文不包含不同的信息

这只是Probot简化处理GitHub中webhook事件的一个功能。我会试着解释为什么它会有帮助

如果要在没有Probot的情况下使用webhook事件,则必须解析每个pull_请求事件,检查action字段中的案例,并决定是否处理它

有几个事件在有效负载中具有顶级操作字段,包括:

还有更多。。。 他们没有让应用程序开发人员自己对JSON执行这种解析和检查,而是决定简化回调,以便您可以使用特定的[event].[action]模式订阅Webhook,并且框架负责在收到匹配的事件和操作时调用您的回调

因此,您有两个选项来处理pull_请求事件:

如果您不知道需要哪些事件,或者需要动态处理事件,那么订阅pull_请求就是接收所有pull请求事件的方式 如果您知道应该处理哪些事件,并且可以忽略其余事件,请订阅显式pull_请求。[event]应该简化您的应用程序代码
您也可以订阅*,它表示probot应用程序接收的所有事件,而不是明确列出应用程序中所有支持的事件。

非常感谢您的解释。因此,我们可以安全地假设,除了您提到的解析之外,没有其他好处。我只关心哪种方法在性能方面更好,使用event.action还是仅使用事件,然后基于action进行解析。框架为event和event.action发出事件,因此只订阅应用程序代码中您关心的一个或多个事件