Share via


ASP.NET WebHooks 개요

WebHook는 Web API와 SaaS 서비스를 연결하는 간단한 pub/sub 모델을 제공하는 가벼운 HTTP 패턴입니다. 서비스에서 이벤트가 발생하면 등록된 구독자에게 HTTP POST 요청의 형태로 알림이 전송됩니다. POST 요청에는 수신자가 적절하게 대처할 수 있도록 이벤트에 대한 정보를 포함되어 있습니다.

단순성 때문에 WebHook는 Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Slack, Stripe, Trello 등 많은 서비스에 의해 이미 노출되어 있습니다. 예를 들어 WebHook은 Dropbox에서 파일이 변경되었거나 GitHub에서 코드 변경이 커밋되었거나 PayPal에서 결제가 시작되었거나 Trello에서 카드 생성되었음을 나타낼 수 있습니다. 가능성은 무한합니다!

Microsoft ASP.NET WebHooks를 사용하면 ASP.NET 애플리케이션의 일부로 WebHooks를 더 쉽게 보내고 받을 수 있습니다.

  • 수신 쪽에서는 여러 WebHook 공급자로부터 WebHook를 수신하고 처리하기 위한 일반적인 모델을 제공합니다. Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello, WordPressZendesk에 대한 지원으로 기본적으로 제공되지만 더 많은 지원을 추가하기 쉽습니다.

  • 송신 쪽에서는 구독 관리 및 저장뿐만 아니라 올바른 구독자 집합에 이벤트 알림을 보내는 기능을 지원합니다. 이렇게 하면 구독자가 구독할 수 있는 고유한 이벤트 집합을 정의하고 상황이 발생할 때 이를 알릴 수 있습니다.

시나리오에 따라 두 부분을 함께 사용하거나 따로 사용할 수 있습니다. 다른 서비스에서 WebHook만 수신해야 하는 경우 수신기 부분만 사용할 수 있습니다. 다른 사용자가 사용할 WebHook만 노출하려면 이 작업을 수행할 수 있습니다.

이 코드는 ASP.NET Web API 2 및 ASP.NET MVC 5를 대상으로 하며 GitHub에서 OSS로 사용할 수 있습니다.

WebHooks 개요

WebHooks는 서비스마다 사용되는 방식이 다르지만 기본 아이디어는 동일하다는 것을 의미하는 패턴입니다. WebHooks는 사용자가 다른 곳에서 발생하는 이벤트를 구독할 수 있는 간단한 pub/sub 모델로 생각할 수 있습니다. 이벤트 알림은 이벤트 자체에 대한 정보를 포함하는 HTTP POST 요청으로 전파됩니다.

일반적으로 HTTP POST 요청에는 WebHook이 트리거하는 이벤트에 대한 정보를 포함하여 WebHook 발신자가 결정한 JSON 개체 또는 HTML 양식 데이터가 포함됩니다. 예를 들어 GitHub 의 WebHook POST 요청 본문은 특정 리포지토리에서 새 문제가 열린 결과로 다음과 같습니다.

{
  "action": "opened",
  "issue": {
      "url": "https://api.github.com/repos/octocat/Hello-World/issues/1347",
      "number": 1347,
      ...
  },
  "repository": {
      "id": 1296269,
      "full_name": "octocat/Hello-World",
      "owner": {
          "login": "octocat",
          "id": 1
          ...
      },
      ...
  },
  "sender": {
      "login": "octocat",
      "id": 1,
      ...
  }
}

WebHook이 의도한 보낸 사람으로부터 실제로 있는지 확인하기 위해 POST 요청은 어떤 식으로든 보호된 다음 수신자가 확인합니다. 예를 들어 GitHub WebHooks 에는 요청 본문의 해시가 포함된 X-Hub-Signature HTTP 헤더가 포함되어 있어 수신기 구현에서 확인할 수 있으므로 걱정할 필요가 없습니다.

WebHook 흐름은 일반적으로 다음과 같습니다.

  • WebHook 발신자는 클라이언트가 구독할 수 있는 이벤트를 노출합니다. 이벤트는 시스템에 대한 관찰 가능한 변경 내용(예: 새 데이터 항목이 삽입됨, 프로세스가 완료되었거나 다른 항목)을 설명합니다.

  • WebHook 수신기는 다음 네 가지로 구성된 WebHook을 등록하여 구독합니다.

    1. HTTP POST 요청 형식으로 이벤트 알림을 게시해야 하는 위치에 대한 URI입니다.

    2. WebHook를 발생시켜야 하는 특정 이벤트를 설명하는 필터 집합입니다.

    3. HTTP POST 요청에 서명하는 데 사용되는 비밀 키입니다.

    4. HTTP POST 요청에 포함할 추가 데이터입니다. 예를 들어 HTTP POST 요청 본문에 포함된 추가 HTTP 헤더 필드 또는 속성일 수 있습니다.

  • 이벤트가 발생하면 일치하는 WebHook 등록이 발견되고 HTTP POST 요청이 제출됩니다. 일반적으로 수신자가 응답하지 않거나 HTTP POST 요청으로 인해 오류 응답이 발생하는 경우 HTTP POST 요청 생성이 여러 번 다시 시도됩니다.

WebHooks 처리 파이프라인

들어오는 WebHooks에 대한 Microsoft ASP.NET WebHooks 처리 파이프라인은 다음과 같습니다.

ASP.NET WebHooks 처리 파이프라인

여기서 두 가지 주요 개념은 수신기처리기입니다.

  • 수신자는 지정된 보낸 사람으로부터 WebHook의 특정 버전을 처리하고 WebHook 요청이 실제로 의도한 보낸 사람으로부터 온 것인지 확인하기 위해 보안 검사를 적용할 책임이 있습니다.

  • 처리기는 일반적으로 사용자 코드가 특정 WebHook 처리를 실행하는 위치입니다.

다음 노드에서 이러한 개념은 자세한 내용에 설명되어 있습니다.