ملخص سريع
تستخدم واجهات برمجة التطبيقات المعتمدة على الأحداث (Event-driven APIs) خطافات الويب (webhooks) للإشعارات الخارجية وقوائم انتظار الرسائل للمعالجة الداخلية. قم بنشر الأحداث إلى قائمة انتظار (RabbitMQ, Kafka)، ومعالجتها بشكل غير متزامن، وإبلاغ العملاء عبر خطافات الويب. تستخدم PetstoreAPI الحديثة هذا النمط لمعالجة الطلبات، وتحديث المخزون، وإشعارات الدفع.
مقدمة
يضع العميل طلبًا. تحتاج واجهة برمجة التطبيقات (API) الخاصة بك إلى تحصيل الدفع، وتحديث المخزون، وإرسال بريد إلكتروني، وإخطار المستودع، وتشغيل خطافات الويب. هل تفعل كل هذا بشكل متزامن، مما يجعل العميل ينتظر 10 ثوانٍ؟ أم تستجيب على الفور وتعالج بشكل غير متزامن؟
تستجيب واجهات برمجة التطبيقات المعتمدة على الأحداث بسرعة وتعالج في الخلفية. تعيد نقطة نهاية الطلب 201 Created على الفور. الأحداث تشغل المعالجة في الخلفية. خطافات الويب تخطر العملاء عند الانتهاء.
PetstoreAPI الحديثة تستخدم بنية تعتمد على الأحداث للطلبات، المدفوعات، والمخزون.
يساعدك Apidog في اختبار خطافات الويب، والتحقق من تدفقات الأحداث، ومحاكاة المعالجة غير المتزامنة.
بنية تعتمد على الأحداث
تنشر واجهات برمجة التطبيقات المعتمدة على الأحداث (APIs) الأحداث عندما تحدث الأمور. وتشترك الخدمات الأخرى وتتفاعل.
المكونات
- منتج الأحداث - نقطة نهاية API تنشر الأحداث
- ناقل/قائمة انتظار الأحداث - توجيه الأحداث (RabbitMQ, Kafka, SQS)
- مستهلك الأحداث - عمال خلفية يعالجون الأحداث
- خطافات الويب - إخطار العملاء الخارجيين
التدفق
Client → POST /orders → API
API → Publish "order.created" → Queue
API → Return 201 Created → Client
Worker → Consume event → Process order
Worker → Publish "order.completed" → Queue
Webhook Worker → Send webhook → Client
خطافات الويب للأحداث الخارجية
// نشر حدث عند إنشاء طلب
app.post('/v1/orders', async (req, res) => {
const order = await createOrder(req.body);
await eventBus.publish('order.created', {
orderId: order.id,
userId: order.userId,
total: order.total
});
res.status(201).json(order);
});
// عامل خلفية يرسل خطافات الويب
eventBus.subscribe('order.completed', async (event) => {
const webhooks = await getWebhooks(event.userId, 'order.completed');
for (const webhook of webhooks) {
await sendWebhook(webhook.url, {
event: 'order.completed',
data: event
});
}
});
قوائم انتظار الرسائل للأحداث الداخلية
تتعامل قوائم انتظار الرسائل مع معالجة الأحداث الداخلية.
مثال RabbitMQ
// الناشر
await publishEvent('order.created', { orderId: '019b4132' });
// المستهلك
await consumeEvents('order.*', async (event) => {
await processOrder(event);
});
كيف تنفذ PetstoreAPI الحديثة واجهات برمجة التطبيقات المعتمدة على الأحداث
معالجة الطلبات
- POST /orders تعيد 201 فورًا
- نشر حدث order.created
- عامل الدفع يعالج الدفع
- عامل المخزون يحدّث المخزون
- عامل البريد الإلكتروني يرسل تأكيدًا
- عامل خطاف الويب يُخطر العميل
راجع بنية أحداث PetstoreAPI الحديثة.
الاختبار باستخدام Apidog
يدعم Apidog اختبار واجهات برمجة التطبيقات المعتمدة على الأحداث:
- اختبار تسليم خطافات الويب
- التحقق من حمولات الأحداث
- محاكاة المعالجة غير المتزامنة
- اختبار منطق إعادة المحاولة
الخاتمة
تعمل واجهات برمجة التطبيقات المعتمدة على الأحداث على تحسين الأداء وقابلية التوسع. استخدم خطافات الويب للإشعارات الخارجية وقوائم انتظار الرسائل للمعالجة الداخلية. تعرض PetstoreAPI الحديثة أنماطًا جاهزة للإنتاج تعتمد على الأحداث.
الأسئلة الشائعة
ما الفرق بين خطافات الويب وقوائم انتظار الرسائل؟
تُعلم خطافات الويب العملاء الخارجيين عبر HTTP. بينما تتعامل قوائم انتظار الرسائل مع الاتصال الداخلي بين الخدمات.
ما هي قائمة انتظار الرسائل التي يجب أن أستخدمها؟
RabbitMQ للبساطة، Kafka للإنتاجية العالية، AWS SQS لخدمة مُدارة.
كيف تتعامل مع إخفاقات خطاف الويب؟
قم بتطبيق منطق إعادة المحاولة مع التراجع الأسي (انظر دليل موثوقية خطاف الويب الخاص بنا).
هل يمكنك استخدام الأحداث بدون قوائم انتظار الرسائل؟
نعم، ولكن قوائم الانتظار توفر المتانة، وإعادة المحاولة، وفصل المكونات.
كيف تختبر واجهات برمجة التطبيقات المعتمدة على الأحداث؟
استخدم Apidog لاختبار خطافات الويب والتحقق من تدفقات الأحداث.
