فرض کنید یک پرداخت انجام شده، سفارش جدیدی ثبت شده یا وضعیت یک درخواست در یک سرویس دیگر تغییر کرده است. اگر سیستم شما مجبور باشد هر چند ثانیه یکبار از آن سرویس بپرسد «اتفاق جدیدی افتاده؟»، هم منابع زیادی مصرف میشود و هم طراحی سیستم پیچیدهتر خواهد شد. Webhook برای حل همین مسئله استفاده میشود.
Webhook چیست؟
Webhook یک روش ارتباطی مبتنی بر رویداد است.
یعنی بهجای اینکه سیستم شما دائماً وضعیت یک سرویس دیگر را بررسی کند، آن سرویس هنگام وقوع یک اتفاق مشخص، خودش درخواست HTTP را به آدرس شما ارسال میکند.
Webhook چگونه کار میکند؟
برای استفاده از Webhook معمولاً یک URL در سیستم دریافتکننده تعریف میشود.
سرویس ارسالکننده این URL را ذخیره میکند و زمانی که رویداد موردنظر رخ دهد، اطلاعات آن رویداد را به این آدرس میفرستد.
برای مثال بعد از پرداخت موفق، سرویس پرداخت میتواند اطلاعات تراکنش را به یک Endpoint در سایت شما ارسال کند.
تفاوت Webhook و API چیست؟
API
- سیستم شما درخواست را شروع میکند
- برای دریافت اطلاعات باید Query ارسال شود
- برای عملیات مستقیم مناسب است
- کنترل درخواست دست سیستم فراخواننده است
Webhook
- سرویس مقابل درخواست را شروع میکند
- اطلاعات هنگام رخداد ارسال میشوند
- برای Notification و Automation مناسب است
- بر اساس Event اجرا میشود
API معمولاً یعنی «من از تو اطلاعات میخواهم»، Webhook یعنی «اگر اتفاقی افتاد، خودت به من خبر بده».
Polling چیست و چه تفاوتی با Webhook دارد؟
در Polling سیستم شما در فاصلههای زمانی مشخص از سرویس دیگر وضعیت جدید را سؤال میکند.
برای مثال:
اگر تغییرات کم باشند، تعداد زیادی از این درخواستها ممکن است بینتیجه باشند.
Webhook در چنین شرایطی کارآمدتر است، چون فقط زمانی درخواست ارسال میشود که اتفاقی افتاده باشد.
یک مثال ساده از Webhook
فرض کنید یک فروشگاه اینترنتی دارید و شرکت حملونقل وضعیت بسته را تغییر میدهد.
بدون Webhook ممکن است سایت مجبور باشد مرتباً بپرسد:
وضعیت مرسوله شماره 1234 چیست؟
اما با Webhook، سرویس حملونقل هنگام تغییر وضعیت، خودش اطلاعات جدید را برای سایت ارسال میکند.
Payload در Webhook چیست؟
Payload همان اطلاعاتی است که داخل درخواست Webhook ارسال میشود.
در بسیاری از سرویسها این اطلاعات با فرمت JSON ارسال میشوند.
مثلاً یک Webhook پرداخت ممکن است شامل موارد زیر باشد:
Webhook Endpoint چیست؟
Endpoint آدرسی از سرور شماست که درخواست Webhook را دریافت میکند.
مثلاً:
https://example.com/webhooks/payment
این مسیر باید درخواست را دریافت، اعتبارسنجی و سپس بر اساس نوع رویداد پردازش کند.
Webhook در پرداخت آنلاین
یکی از کاربردهای مهم Webhook، سیستمهای پرداخت آنلاین است.
در بعضی سرویسها، وضعیت پرداخت یا تسویه از طریق Webhook به سیستم شما اعلام میشود.
Webhook در CRM
CRM میتواند با Webhook به سرویسهای مختلف متصل شود.
مثلاً با ثبت مشتری جدید، اطلاعات آن به یک سیستم دیگر ارسال شود.
Webhook و سامانه پیامکی
بعضی سرویسهای پیامکی از Webhook برای اعلام وضعیت ارسال پیام استفاده میکنند.
در این حالت سیستم میتواند متوجه شود پیام:
و نتیجه را داخل گزارشهای خودش ثبت کند.
Webhook در اتوماسیون کسبوکار
Webhook یکی از ابزارهای مهم برای اتصال مراحل مختلف یک فرآیند است.
مثلاً:
بدون اینکه یک کاربر مجبور باشد همه این مراحل را دستی انجام دهد.
Event در Webhook چیست؟
هر Webhook معمولاً برای یک یا چند Event تعریف میشود.
نمونه Eventها:
- order.created
- payment.success
- payment.failed
- ticket.created
- customer.updated
- invoice.paid
نام دقیق Eventها به سرویس مورد استفاده بستگی دارد.
امنیت Webhook چرا مهم است؟
اگر Endpoint بدون اعتبارسنجی طراحی شود، هر فردی میتواند یک درخواست جعلی به آن ارسال کند.
برای همین معمولاً از روشهایی مانند:
استفاده میشود.
هیچ Webhook مالی یا حساس نباید فقط به داده ورودی اعتماد کند.
Webhook Signature چیست؟
یکی از روشهای رایج امنیت، امضای درخواست است.
سرویس ارسالکننده با استفاده از یک Secret مشخص، Signature تولید میکند و همراه درخواست میفرستد.
سرور دریافتکننده نیز Signature را دوباره محاسبه کرده و آن را با مقدار دریافتشده مقایسه میکند.
اگر دو مقدار یکسان نباشند، درخواست نباید معتبر در نظر گرفته شود.
چرا یک Webhook ممکن است چند بار ارسال شود؟
سرویس ارسالکننده ممکن است پاسخ مناسب دریافت نکند و تصور کند درخواست قبلی ناموفق بوده است.
در این شرایط ممکن است همان Event دوباره ارسال شود.
Retry در Webhook چیست؟
اگر سرور دریافتکننده در دسترس نباشد، بسیاری از سرویسها بعداً دوباره تلاش میکنند.
تعداد Retry و فاصله آنها به سیاست سرویس ارسالکننده بستگی دارد.
سرور باید چه پاسخی به Webhook بدهد؟
معمولاً سرویس ارسالکننده انتظار دارد سرور شما در مدت کوتاهی یک HTTP Status موفق برگرداند.
بهتر است عملیات سنگین داخل همان درخواست انجام نشود.
در سیستمهای بزرگتر میتوان Event را ابتدا ذخیره کرد و پردازش اصلی را به Queue سپرد.
ثبت Log برای Webhook
Webhookها معمولاً در پسزمینه اجرا میشوند، بنابراین بدون Log پیدا کردن خطا دشوار خواهد بود.
بهتر است اطلاعاتی مثل:
- زمان دریافت
- نوع Event
- شناسه Event
- وضعیت پردازش
- پاسخ سیستم
- خطای احتمالی
ثبت شوند.
Webhook و Queue
اگر تعداد Eventها زیاد باشد، بهتر است درخواست دریافتشده سریع تأیید شود و پردازش اصلی بعداً انجام شود.
این معماری باعث میشود سرویس در ترافیک بالا پایدارتر باشد.
چه زمانی از Webhook استفاده کنیم؟
Webhook زمانی انتخاب خوبی است که لازم باشد سیستم شما سریع از وقوع یک رویداد در سیستم دیگر مطلع شود.
آیا API و Webhook میتوانند همزمان استفاده شوند؟
بله؛ در واقع این یکی از متداولترین معماریها است.
برای مثال سایت ابتدا از طریق API یک تراکنش ایجاد میکند و بعد نتیجه تغییرات آن را از طریق Webhook دریافت میکند.
سیستمها وقتی ارزش بیشتری دارند که بتوانند با یکدیگر صحبت کنند.
در WebMorteza میتوان API و Webhook سرویسهای مختلف مانند پرداخت، پیامک، CRM، فروشگاه و نرمافزارهای سازمانی را به یکدیگر متصل کرد و فرآیندهای دستی را به عملیات خودکار تبدیل کرد.
سؤالات متداول درباره Webhook
Webhook همان API است؟
خیر. در API معمولاً سیستم شما درخواست را آغاز میکند، اما Webhook هنگام وقوع یک Event از سمت سرویس دیگر ارسال میشود.
آیا Webhook نیاز به HTTPS دارد؟
برای سیستمهای واقعی و مخصوصاً اطلاعات حساس، استفاده از HTTPS بسیار مهم است.
اگر Webhook دو بار دریافت شود چه اتفاقی میافتد؟
سیستم باید به شکلی طراحی شود که Event تکراری باعث اجرای دوباره عملیات حساس نشود.
Webhook برای پرداخت مناسب است؟
بله، اما درخواست باید اعتبارسنجی شود و برای عملیات مالی کنترلهای امنیتی مناسب وجود داشته باشد.
Webhook بهتر است یا Polling؟
اگر سرویس امکان Webhook داشته باشد و نیاز به اطلاع سریع از تغییرات وجود داشته باشد، معمولاً Webhook درخواستهای غیرضروری کمتری ایجاد میکند.
Webhook یکی از سادهترین راهها برای واکنش خودکار سیستمها به رویدادها است.
بهجای اینکه نرمافزار دائماً وضعیت سرویسهای دیگر را بررسی کند، سرویس مقابل میتواند هنگام وقوع یک اتفاق، اطلاعات لازم را مستقیماً ارسال کند.
اگر امنیت، Retry، ثبت Log و جلوگیری از Eventهای تکراری درست طراحی شوند، Webhook میتواند بخش مهمی از معماری اتوماسیون و یکپارچهسازی سیستمها باشد.
API برای درخواست کردن است؛ Webhook برای باخبر شدن از اتفاقی که رخ داده.
گفتوگو درباره این مطلب
۰ دیدگاه