Webhooks و WebSockets دو فناوری هستند که ارتباطات را از طریق وب مدیریت می کنند. اما آنها بسیار متفاوت هستند و هر کدام نیازهای خاصی را برطرف می کنند.
Webhooks و WebSockets دو فناوری توسعه وب هستند که مردم اغلب آنها را اشتباه می گیرند. بسیاری از برنامه های کاربردی وب مدرن از Webhooks و WebSockets استفاده می کنند. اگرچه Webhooks و WebSockets کاملاً متفاوت هستند، اما هر دو ارتباط در برنامه های وب را نشان می دهند.
بنابراین Webhooks و WebSockets چیست؟ چه چیزهایی آنها را متفاوت می کند؟
وب هوک چیست و چگونه کار می کند؟
میتوانید Webhook را بهعنوان «درخواست HTTP ناشی از رویداد» در نظر بگیرید. این یعنی چی؟ Webhook یک کنش پاسخ به تماس HTTP است که معمولاً توسط یک رویداد در سرور ایجاد می شود. این همه چیز نیست، معمولاً داده ها را از طریق یک URL از پیش پیکربندی شده به سرور دیگری ارسال می کند. این موضوع ایده Webhooks بودن یک وسیله ارتباطی “سرور به سرور” را به وجود می آورد.
برای درک بهتر مکانیسم کار Webhooks، یک برنامه وب را در نظر بگیرید که از API Stripe برای دریافت پرداخت ها استفاده می کند. هر زمان که مشتری پرداختی انجام می دهد، Stripe پول را دریافت می کند، اما برنامه شما هیچ ایده ای ندارد. اینجاست که Webhooks وارد می شود. تصویر زیر را در نظر بگیرید:
Stripe از شما میخواهد که URL نقطه پایانی Webhook را برای ارسال دادههای پرداخت مشتری به سرور شما هنگام شروع یک رویداد پرداخت جدید ارائه دهید. سپس سرور شما داده ها را دریافت می کند، عملیاتی را روی آن انجام می دهد و داده های پایدار را در پایگاه داده ذخیره می کند.
WebSockets چیست و چگونه کار می کند؟
WebSocket پروتکلی است که معمولاً با جاوا اسکریپت استفاده می کنید. این یک کانال ارتباطی دو طرفه، مداوم و دو طرفه ایجاد می کند. این کار را از طریق یک اتصال واحد بین دو پورت TCP از یک مشتری (مرورگر) به یک سرور انجام می دهد. محبوب ترین برنامه WebSockets در برنامه های چت مانند WhatsApp است.
در حالی که Webhook ها مبتنی بر HTTP هستند (یعنی از پروتکل HTTP استفاده می کنند)، WebSocket به تنهایی یک پروتکل کامل بر اساس TCP است درست مانند HTTP. WebSockets می تواند هنگام کار بر روی برنامه های کاربردی جریان داده سرور-کلینت با تاخیر کم بسیار مفید باشد.
میتوانید با اتصال WebSocket به تأخیر کمی دست یابید زیرا برخلاف HTTP پیشفرض، بین تراکنشها باز میماند. این اجازه می دهد تا داده ها به طور یکپارچه بین هر دو طرف جریان داشته باشند.
قبل از WebSockets، توسعهدهندگان از روشهای مختلفی برای دریافت دادههای بلادرنگ از طریق HTTP استفاده میکردند. اگرچه آنها مدتی است که در اطراف هستند، اما از محدودیت هایی رنج می برند.
به عنوان مثال، نظرسنجی طولانی مستلزم این است که مشتری همیشه یک درخواست جدید را در یک بازه زمانی مشخص به سرور ارسال کند. این بدان معنی است که وقتی داده های جدیدی در سرور وجود دارد، آن را برمی گرداند. اما اگر وجود نداشته باشد، درخواست عملاً هدر می رود.
برخلاف Webhooks، هر دو طرف اتصال WebSocket می توانند داده ها را به طرف دیگر ارسال کنند. این یکی از دلایلی است که WebSockets مزیت سرعت زیادی را ارائه می دهد، به خصوص زمانی که داده ها از سرور به مشتری ارسال می شوند. برنامههایی که از WebSockets استفاده میکنند باید هنگام واکشی دادهها از سرور از تأخیر کم بهره ببرند.
شما می توانید از WebSocket ها از طریق TLS نیز مانند HTTP استفاده کنید. این کار دادههایی را که شما منتقل میکنید ایمن میکند و به کاهش حملات انسان در میانه کمک میکند. حتی یک اتصال مداوم با این رویکرد ایمن باقی خواهد ماند. لازم نیست نگران سرقت دادهها یا خراب کردن ارتباطات توسط مهاجمان باشید.
چه زمانی باید از وب هوک استفاده کرد؟
هدف Webhooks و WebSockets پیادهسازی ابزارهای بهتر ارتباط بلادرنگ بر روی وب است. با این حال، آنها این کار را به روش های کاملا متفاوت انجام می دهند. تصمیم گیری در مورد اینکه کدام یک از این دو فناوری را باید در برنامه خود استفاده کنید اغلب می تواند چالش برانگیز باشد. شما باید با دقت به نقاط قوت و ضعف آنها توجه کنید تا ببینید کدامیک به بهترین وجه نیازهای شما را برآورده می کند.
بنابراین چه زمانی باید Webhooks را به WebSockets انتخاب کنید؟
- هنگام مصرف API که مالک آن نیستید. مثال Stripe از تصویر قبلی Webhook را در نظر بگیرید. Stripe یک ارائهدهنده خدمات پرداخت است و برنامه شما فقط میتواند بر روی API آن ساخته شود. شما هیچ کنترلی روی Stripe ندارید، بنابراین نمی توانید یک سرور WebSocket در انتهای آنها ایجاد کنید. در چنین مواردی باید از Webhooks استفاده کنید.
- اگر برنامه شما سروری است که باید با سرور دیگری ارتباط برقرار کند، بهتر است از Webhooks استفاده کنید. این سیستم ارتباطی “سرور به سرور” ایده آل است.
- وب هوک ها دو طرفه یا پایدار نیستند. فقط زمانی باید از Webhooks استفاده کنید که برنامه شما انتظار داده پاسخ را از طریق یک کانال نداشته باشد.
- همچنین قابل توجه است که Webhooks راه ایده آلی برای انجام عملیات سرور است که به عنوان عملکردهای بدون سرور اجرا می شود. به عنوان مثال می توان به توابع AWS Lambda و Google cloud اشاره کرد.
می توانید Webhooks را در webhook.site آزمایش کنید. این سایت به شما امکان می دهد ببینید داده هایی که Webhook به برنامه شما ارسال می کند چگونه خواهد بود. قبل از اینکه بخواهید یک نقطه پایانی را در برنامه خود پیاده سازی کنید، درک ماهیت ارتباط Webhook بسیار مفید است.
چه زمانی باید از WebSockets استفاده کنید؟
برنامه های بلادرنگ، سیستم های اطلاع رسانی و سیستم های اشتراک گذاری داده های زنده برخی از کاربردهای رایج WebSockets هستند. در نظر داشته باشید که با WebSockets، کانال اتصال باید همیشه باز باشد، این پروتکل فقط زمانی باید استفاده شود که هزینه آن ارزشش را داشته باشد.
- زمانی که برنامه شما به طور مداوم داده ها را بین مشتری و سرور مبادله می کند، باید از WebSockets استفاده کنید. به عنوان مثال، در یک برنامه اشتراکگذاری مکان زنده، موقعیت مکانی کاربر به طور مداوم در سرور و کلاینت در حین حرکت بهروزرسانی میشود. WebSockets این امکان را فراهم می کند.
- در برنامه های ارتباطی چندرسانه ای مانند WhatsApp، WebSocket پروتکل ارتباطی ایده آل است. این امکان تبادل اطلاعات دو طرفه بسیار سریع را فراهم می کند که در این نوع برنامه ها نقش اساسی دارد.
- همچنین باید از WebSockets در برنامه هایی استفاده کنید که فیدهای بلادرنگ مانند Livescore را پیاده سازی می کنند. این وبسایت بهروزرسانیهای زنده مسابقات فوتبال را همانطور که در زمان واقعی اتفاق میافتد به اشتراک میگذارد. اما این کار را بدون نیاز به درخواست جدید یا نیاز به به روز رسانی مرورگر خود انجام می دهد.
- موارد دیگری که باید از WebSockets استفاده کنید شامل برنامههای پخش زنده ویدیو/صوتی، سیستمهای اعلان زنده و بازیهای چندنفره بلادرنگ است. آنها همچنین در برنامه های ویرایش مشترک مانند Google Docs، Notion و غیره مفید هستند.
وب هوک ها و سوکت های وب متفاوت هستند
واضح است که اگرچه Webhooks و WebSockets مشکلات مشابهی را حل می کنند، اما یکسان نیستند و هر کدام موارد استفاده خاص خود را دارند. وب هوک ها تماس های یک طرفه و رویدادی بر اساس پروتکل HTTP هستند. فناوری WebSocket یک پروتکل مستقل است که امکان تبادل دو طرفه داده ها را بدون درخواست فراهم می کند.
این مهم است که همیشه نیاز خود را هنگام ساخت یک برنامه شناسایی کنید تا از هدر رفتن منابع جلوگیری کنید. در برخی موارد، شما باید Webhooks را ترجیح دهید زیرا WebSockets گاهی اوقات ممکن است هزینه زیادی نداشته باشد. مطمئن شوید که فقط در صورت لزوم از آنها استفاده می کنید.