Cách nhận dữ liệu webhook

Tim là một nhà phát triển phần mềm, một người đam mê DevOps với niềm đam mê tự động hóa và là người yêu thích mã nguồn mở. Trong thời gian rảnh rỗi, anh ấy viết các hướng dẫn liên quan đến Google Cloud, đóng góp mở trên GitHub và tham gia vào các cộng đồng nhà phát triển

Hướng dẫn này sẽ giới thiệu về khái niệm webhook. Chúng tôi cũng sẽ xây dựng một máy chủ Flask đơn giản có thể nhận webhook GitHub. Chúng tôi cũng sẽ xem cách hiển thị các máy chủ cục bộ của chúng tôi

Webhook là gì?

Trước khi nói về webhook, hãy nói về API. Dưới đây là luồng dữ liệu cho một API

Bạn tạo một yêu cầu GET/POST cho API và bạn sẽ nhận được phản hồi. Nếu bạn muốn tìm hiểu thêm về cách làm việc với API, hãy xem bài viết của tôi về cách làm việc với API bằng Python hoặc bài viết của tôi về cách làm việc với API bằng JavaScript

Hãy xem xét API Github, điều gì sẽ xảy ra nếu chúng ta muốn xây dựng một API sẽ gửi email sử dụng mỗi khi có vấn đề mới được tạo trong repo. Một cách là xây dựng một API sẽ đưa ra yêu cầu cứ sau 1-2 phút để kiểm tra xem có vấn đề mới nào xảy ra hay không và thông báo cho chúng tôi. Quá trình này được gọi là bỏ phiếu. Về cơ bản, chúng tôi sẽ phải thực hiện các yêu cầu định kỳ để kiểm tra một vấn đề mới. Tuy nhiên, điều này có vẻ không hiệu quả. Điều gì sẽ xảy ra nếu GitHub đưa ra yêu cầu đối với API của chúng tôi bất cứ khi nào có sự cố mới được tạo. Đây được gọi là một webhook. Thay vì chúng tôi thực hiện các yêu cầu định kỳ, chúng tôi chỉ cung cấp cho GitHub điểm cuối API của chúng tôi và bất cứ khi nào một vấn đề mới được tạo, một yêu cầu sẽ được gửi đến điểm cuối mà chúng tôi đã cung cấp cho Github. Webhook còn được gọi là API đảo ngược. Dưới đây là so sánh giữa bỏ phiếu và webhook. Hình ảnh này được lấy cảm hứng từ bài viết này

Như bạn có thể nhận thấy, rất nhiều yêu cầu được đưa ra và tùy thuộc vào tần suất chúng tôi đưa ra yêu cầu, có thể có một chút chậm trễ giữa sự cố mới được tạo và API của chúng tôi nhận được thông báo

Hãy tạo một API để nhận yêu cầu bất cứ khi nào có Sự cố mới được tạo trong repo Github

Tạo một máy chủ Flask đơn giản

Đầu tiên, hãy tạo một điểm cuối hello world

from flask import Flask,request,json

app = Flask[__name__]

@app.route['/']
def hello[]:
    return 'Webhooks with Python'

if __name__ == '__main__':
    app.run[debug=True]

Bây giờ chúng ta cần tạo một điểm cuối để nhận yêu cầu từ API GitHub. Đây sẽ là điểm cuối tiêu chuẩn chấp nhận yêu cầu POST

@app.route['/githubIssue',methods=['POST']]
def githubIssue[]:
    data = request.json
    print[f'Issue {data["issue"]["title"]} {data["action"]}']
    print[f'{data["issue"]["body"]}']
    print[f'{data["issue"]["url"]}']
    return data

Tôi đã đọc tài liệu và biết các khóa cho các đối tượng JSON. Bạn có thể sử dụng các khóa khác nhau để truy cập nhiều dữ liệu hơn như nhãn vấn đề, v.v.

Bây giờ bạn có thể chạy máy chủ bình của mình

python3 __init__.py

Hiển thị URL máy chủ cục bộ của chúng tôi một cách công khai

Webhooks yêu cầu điểm cuối API công khai vì chúng không thể đưa ra yêu cầu đối với điểm cuối chẳng hạn như 'http. //127. 0. 0. 1. 5000/’. Một cách là triển khai API và sử dụng URL của API đã triển khai. Một cách khác là hiển thị máy chủ cục bộ của bạn dưới dạng URL có sẵn công khai. Điều này sẽ là tạm thời và sẽ chỉ hoạt động miễn là máy chủ Flask của bạn đang chạy. Mọi yêu cầu được thực hiện đối với URL công khai cũng sẽ được thực hiện đối với URL máy chủ cục bộ của bạn

Chúng tôi sẽ sử dụng ngrok để hiển thị URL localhost của chúng tôi. Bạn sẽ phải tạo một tài khoản


Tải xuống ngrok cho hệ điều hành của bạn và giải nén nó. Bây giờ hãy mở một thiết bị đầu cuối và cd vào thư mục chứa tệp ngrok đã giải nén. Nhập lệnh sau trong thiết bị đầu cuối

ngrok  http  

Ví dụ. Nếu máy chủ bình của bạn đang chạy trên cổng 5000, bạn phải nhập thông tin sau

ngrok http 5000


Bạn sẽ thấy một đầu ra tương tự trong thiết bị đầu cuối của mình. URL công khai là URL bên cạnh 'Chuyển tiếp'. Trong trường hợp của tôi, đó là http. //35cc-69-58-102-156. ngrok. io. Nếu bạn truy cập URL công khai của mình, bạn sẽ thấy điều giống như bạn thấy khi truy cập URL máy chủ cục bộ của mình

Tạo Webhook Vấn đề

Chọn bất kỳ Repo Github nào bạn thích. Truy cập Cài đặt > Webhook > Thêm Webhook

Nhập điểm cuối của bạn, trong trường hợp của tôi, đó là http. //35cc-69-58-102-156. ngrok. io/githubIssue

Vì chúng tôi chỉ muốn yêu cầu được thực hiện khi Sự cố được tạo trong repo, hãy chọn 'Hãy để tôi chọn các sự kiện riêng lẻ. ' và cuộn xuống để chọn 'Sự cố'. Sau khi bạn xuống, hãy cuộn xuống và tạo webhook

Kiểm tra Webhook

Tạo một vấn đề trong repo của bạn

Bây giờ hãy kiểm tra thiết bị đầu cuối nơi máy chủ bình đang chạy. Tôi cũng đã thêm một nhãn và đóng vấn đề

Phần kết luận

Ngay bây giờ máy chủ Flask không làm được gì nhiều. Tuy nhiên, bạn có thể xây dựng trên nó. Thay vì chỉ in dữ liệu nhận được, bạn có thể sử dụng dữ liệu và gửi thông báo đẩy hoặc email. Tôi hy vọng bạn tìm thấy bài viết này hữu ích. Kết nối với trên LinkedIn, Twitter

Làm cách nào để lấy dữ liệu từ webhook trong java?

Nhận dữ liệu từ Enterprise Communications API bằng Java .
Thiết lập và cấu hình trang web ví dụ. .
Thiết lập bí mật được chia sẻ của bạn. .
Lưu trữ trang webhook của bạn. .
Thiết lập webhook của bạn trong Enterprise Communications API. .
Kiểm tra webhook

Webhook có thể trả lại dữ liệu không?

Webhook cho phép bạn chuyển dữ liệu đến và trả lại dữ liệu từ bất kỳ API công khai nào trên internet . Bạn có thể sử dụng nó để gửi tin nhắn, cập nhật thuộc tính của một người trong Khách hàng. io, cập nhật CRM hoặc thực hiện bất kỳ hành động nào đối với khách hàng mà bạn muốn thực hiện.

Làm cách nào để lấy dữ liệu từ webhook bằng Python?

Tạo webhook trong Flask . Flask có sẵn. route[] trang trí liên kết một chức năng với một URL. Hàm nhận dữ liệu ở định dạng JSON từ yêu cầu POST và hiển thị dữ liệu trên thiết bị đầu cuối. create a route in Flask that allows us to receive data on a /webhook path. Flask has an inbuilt . route[] decorator that binds a function to a URL. The function receives data in JSON format from a POST request and displays the data on the terminal.

Làm cách nào để lấy dữ liệu từ webhook trong PHP?

Vì vậy, nếu một cột thay đổi, webhook sẽ được kích hoạt.

Chủ Đề