Webhooks在運行應用程序之間,發生的大部分功能被稱為“魔術”表演。它們有時被稱為反向API,回調甚至通知。那么如何使用Python收聽Webhooks?Python在許多服務中都可以見到,例如SendGrid,Stripe,Slack和GitHub,都使用事件將Webhooks發送為其API的一部分。這使您的應用程序可以偵聽事件并在事件發生時執行操作。
本指南假定您在計算機上安裝了Python v3。您可以在官方下載頁面上找到有關安裝python的詳細信息 。根據您的設置, python 您要使用的命令可能是 python3。
您可以通過從終端運行以下命令來確認安裝的版本:
python --version
或者,如果顯示的版本低于3:
python3 --version
什么是網絡掛鉤
Webhooks之所以稱為反向API,是有原因的。API會將請求發送到您的應用程序,而不是您的應用程序向API發送請求。雖然這個概念聽起來可能不同,但是我們使用Webhook的方式與API使用請求的方式相同。
在大多數Web框架中,都有路由的概念。路由允許應用程序在用戶訪問特定URL時以特定內容或數據進行響應。同樣的想法也適用于API。
當您向GitHub發送有關特定組織的詳細信息的請求時,例如 Bearer,路線是 /orgs/:org 哪里 :org 是組織的名稱。
接收Webhook時應用相同的概念。我們建立一條路由,告訴服務將數據發送到哪里,然后我們的應用程序就坐下來等待,直到對該路由發出請求。Webhook實現中存在一些一致性。
他們通常是 POST 要求。
他們接收JSON數據。
他們需要迅速做出反應。
某些API將要求您的應用程序在一定時間內做出響應,否則將重新發送該事件。例如, Slack API 希望在三秒鐘內返回響應。
使用Flask接收Webhook
該 瓶框架 是一個輕量級的Python Web框架,把自己描述為“微”。這樣一來,您就可以使用所需的內容,然后隨著項目的增長添加更多的結構。
就我們的目的而言,這很好,因為我們只關心路由。確保已安裝Python,然后在終端中運行以下命令來安裝flask:
python -m pip install Flask
您可以在Flask文檔中找到完整的安裝和設置詳細信息 。
接下來,創建一個 .py 文件,例如 main.py 并添加以下內容:
from flask import Flask, request, Response
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def respond():
print(request.json);
return Response(status=200)
此代碼將Flask類以及request和Response對象導入。然后使用名稱實例化它 __name__ 在將其分配給 app 變量。該命名方案是Flask文檔中的約定。
接下來,我們使用 @app.route 裝飾者傾聽 POST 針對 /webhook 路徑。當對路由提出請求時,此裝飾器調用緊隨其后的函數。在這種情況下, respond 功能。
就本例而言,我們 print 將請求作為json發送,然后返回 Response 狀態代碼為200。此響應告訴發送者我們已收到該掛鉤。您應該能夠使用Flask的首選技術來運行服務器:
export FLASK_APP=main.py
python -m flask run
就是這樣!現在,我們有了一個應用程序,該應用程序使用python和flask監聽webhook。部署后, POST 向端點發出的請求將觸發 respond 功能。
例如:webhook. 這也是您將提供發送Webhook服務的URL。
接收Django的Webhook
在Django中設置應用程序要比Flask自動化得多,但這也帶來了更精細的文件結構。作為更傳統的模型-視圖-控制器(MVC)框架,Django為您提供了該項目的主要部分。完整的安裝指南可在 官方的Django文檔頁面上找到,但也可以通過以下方式安裝 pip 使用以下命令:
python -m pip install Django
如果您是從頭開始建立專案,請使用 django-admin 實用程序來創建一個新項目。如果您已有要添加Webhooks的Django項目,請跳至下一步。
django-admin startproject example-project
這為新的Django項目奠定了基礎。導航到新創建的文件夾,您將看到類似于以下內容的結構:
example-project/
manage.py
example-project/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
我們可以通過運行來確認一切正常 python manage.py runserver。
Django的慣例是在此外部“項目”中設置“應用”。您可以避免這種情況,并通過運行來設置一個單應用程序項目 django-admin startproject example-project .尾隨句點(。)代替。對于本教程,我們將鏡像首選的方式,如前所示。
為此,我們將設置一個名為webhooks的“應用程序” 。
python manage.py startapp webhooks
這將創建一個名為webhooks的新目錄 。現在我們可以編寫一些代碼。
我們將專注于三個文件: webhooks/views.py, webhooks/urls.py (尚未創建),以及 example-site/urls.py。
開啟檔案 webhooks/views.py。在這里,我們將編寫處理路線的邏輯。
from django.http import HttpResponse
from django.views.decorators.http import require_POST
@require_POST
def example(request):
return HttpResponse('Hello, world. This is the webhook response.')
此代碼執行以下操作:
它導入 HttpResponse 用于發送響應的對象。
它導入一個特殊的裝飾器以限制請求方法。在Django中,路由默認情況下接受所有HTTP方法,并讓視圖管理它們響應的方法。
調用裝飾器,將其后的功能限制為僅 POST 方法。
定義一個函數,名為 example 將請求作為參數并返回響應。
這個 example 函數的名稱將鏈接到我們的 urls.py 盡快歸檔。它不需要與特定路徑對齊。
接下來,建立 webhooks/urls.py 如果尚不存在。這是我們在項目的此子應用程序內組織路線的地方。
from django.urls import path
from . import views
urlpatterns = [
path('example/', views.example)
]
在這里,我們導入 path 從 django.urls。它定義了各個路線,并將它們與視圖關聯。接下來,我們導入所有視圖。
最后, urlpatterns 被傳遞路徑列表。Django將此列表識別為與應用程序關聯的路由。
在這種情況下,我們定義了以 example/ 并與視圖關聯 views.example,這是我們函數的名稱 views.py。
完成此操作后,我們的應用程序可以運行,但是我們需要將其告知外部項目。打開 example-project/urls.py。它看起來應該與先前的文件相似,但是已經存在 admin 路線。像這樣添加新路徑:
urlpatterns = [
path('admin/', admin.site.urls),
path('webhooks/', include('webhooks.urls'))
]
如果您的服務器已停止,請使用 python manage.py runserver。
現在嘗試向發出POST請求 /example/(如果不同,請用您自己的主機和端口替換)。
這樣,我們就建立了一個Django項目,該項目監聽一個Webhook /webhooks/example。部署后,將此路徑附加到完整URL上,并將完整URL提供給發送Webhook的服務。
在本地測試Webhooks
要在本地進行Webhooks的測試而不進行部署,我們需要打開從開發機器到外界的連接。
一種選擇是使用 ngrok。通過此服務,您可以提供對本地計算機上特定端口的外部訪問。這非常適合我們的需求。首先,請注冊并按照安裝和入門說明進行操作。
完成后,如果您使用的是MacOS,則應該可以運行 ./ngrok http 3000 在將3000替換為正在運行的Python應用程序的端口的終端中。例如,默認的Django站點通常在端口8000上運行。
一旦啟動并運行,ngrok將為您提供一個可用于測試Webhook的URL。在Bearer中,我們在通知設置中提供了“測試”按鈕。
配置完成后,您將開始在該URL接收webhook。開發和測試完成后,請不要忘記將其更改為最終部署的Webhook URL。
您可以使用此信息做什么?
一旦配置了Webhook,則取決于您如何處理它收到的信息。您可以使用此信息對事件進行實時響應,使應用程序的功能翻轉,甚至可以將其用作將數據寫入數據庫的方式。您的Webhook可以具有無數種功能,具體取決于API提供程序發送的信息類型。
盡管我們在本文中構建了一個基本的實現,但是值得一提的是,許多服務都提供了驗證請求是否來自實際來源的方法。這可以通過限制訪問您的應用程序的URL或通過匹配密鑰來完成。例如,GitHub允許您設置將隨每個Webhook發送的秘密。
以上就是關于如何使用Python收聽Webhooks的全部內容介紹,想了解更多關于Python的信息,請繼續關注中培偉業。