كيفية اختبار واجهات برمجة تطبيقات Localhost باستخدام خدمات Webhook؟

Ashley Innocent

Ashley Innocent

28 يناير 2026

كيفية اختبار واجهات برمجة تطبيقات Localhost باستخدام خدمات Webhook؟

يتطلب اختبار واجهات برمجة التطبيقات المحلية (localhost APIs) التي تحتاج إلى تلقي رسائل الويب هوك (webhooks) أو الاستدعاءات (callbacks) من خدمات خارجية، كشف خادم التطوير المحلي الخاص بك على الإنترنت مؤقتًا. توفر خدمات الأنفاق (tunneling services) مثل ngrok و NPort و Cloudflare Tunnel وغيرها اتصالات آمنة تمنح خادمك المحلي عنوان URL عامًا.

💡
قم بتنزيل Apidog لتتبع سير عمل اختبار الويب هوك في هذا الدليل. يغطي هذا الدليل كيفية اختيار الأداة المناسبة، وإعداد النفق، واختبار الويب هوك بفعالية باستخدام Apidog، والتعامل مع التحديات الشائعة مثل المصادقة، وحدود المعدل، وتصحيح الأخطاء.
button

لماذا تحتاج إلى أنفاق الخادم المحلي (Localhost Tunneling)

أنت تقوم ببناء واجهة برمجة تطبيقات تتكامل مع خدمات خارجية. كل شيء يعمل على جهاز الكمبيوتر المحمول الخاص بك – تستجيب نقاط النهاية بشكل صحيح، وتتدفق البيانات بسلاسة. ثم تحاول اختبار استدعاءات الويب هوك من Stripe، GitHub، Twilio، أو أي خدمة خارجية.

المشكلة: لا تستطيع الخدمات الخارجية الوصول إلى localhost:3000. خادم التطوير الخاص بك غير متاح من الإنترنت.

سيناريوهات شائعة حيث يعيق هذا سير عملك:

1. اختبار الويب هوك (Webhook Testing)

ترسل خدمات مثل Stripe تأكيدات الدفع، ويرسل GitHub أحداث المستودع، وترسل Slack أحداث التفاعل – كلها كطلبات POST إلى واجهة برمجة التطبيقات الخاصة بك. أثناء التطوير، تحتاج هذه الخدمات إلى عنوان URL عام لإرسال رسائل الويب هوك إليه.

2. عناوين URL لاستدعاء OAuth

عند تنفيذ "تسجيل الدخول باستخدام Google" أو "تسجيل الدخول باستخدام GitHub" أو أي تدفق OAuth، يقوم مزود المصادقة بإعادة توجيه المستخدمين إلى تطبيقك برمز ترخيص. يجب أن يكون عنوان URL لإعادة التوجيه متاحًا للعامة ويتطابق مع ما سجلته لدى المزود.

3. تكامل واجهة برمجة التطبيقات لطرف ثالث

تتطلب بعض واجهات برمجة التطبيقات عناوين URL للاستدعاء للعمليات غير المتزامنة. على سبيل المثال، تخبر خدمات تحويل الفيديو واجهة برمجة التطبيقات الخاصة بك عند اكتمال المعالجة، أو يؤكد معالجات الدفع المعاملات.

4. تطوير تطبيقات الجوال

غالبًا ما يفشل اختبار واجهة برمجة التطبيقات الخاصة بك من جهاز محمول على نفس الشبكة لأن تطبيق الهاتف المحمول لا يمكنه حل localhost. يمنحك النفق عنوان URL يعمل من أي جهاز.

5. عروض للعملاء

أحيانًا تحتاج إلى عرض العمل قيد التقدم للعملاء أو أصحاب المصلحة. يؤدي النشر إلى بيئة الاختبار لكل تغيير صغير إلى إبطاء التكرار. يتيح عنوان URL العام المؤقت للعملاء اختبار بيئة التطوير الخاصة بك.

كيف تعمل أنفاق الخادم المحلي (Localhost Tunneling)

تنشئ خدمات الأنفاق اتصالًا آمنًا بين خوادمها السحابية وجهازك المحلي:

خدمة خارجية ← خدمة الأنفاق (عنوان URL عام) ← اتصال آمن ← الخادم المحلي الخاص بك:3000

العملية:

  1. تبدأ عميل نفق على جهازك يشير إلى المنفذ المحلي الخاص بك
  2. يتصل العميل بالبنية التحتية السحابية لخدمة الأنفاق
  3. تخصص الخدمة عنوان URL عامًا (مثل https://abc123.ngrok.io)
  4. الطلبات الواردة إلى عنوان URL العام هذا يتم إعادة توجيهها عبر الاتصال المشفر إلى خادمك المحلي
  5. يتلقى خادمك المحلي الطلب كما لو جاء مباشرة من العميل
  6. تتدفق الردود عائدة عبر النفق إلى طالب الخدمة

يحدث هذا بشفافية. لا يحتاج خادمك المحلي إلى معرفة أنه يقع خلف نفق.

مقارنة خدمات الأنفاق الشائعة

فيما يلي الخيارات الأكثر شيوعًا في عام 2026، مع نقاط قوتها وقيودها:

ngrok (الأكثر شعبية)

الأفضل لـ: المشاريع القائمة، الفرق التي ترغب في الموثوقية

ngrok http 3000

الإيجابيات:

السلبيات:

الطبقة المجانية:

الخطط المدفوعة: 8-20 دولارًا شهريًا

NPort (بديل مجاني صاعد)

الأفضل لـ: المطورين الذين يتجنبون تكاليف الاشتراك

nport start 3000

الإيجابيات:

السلبيات:

الطبقة المجانية:

هذه هي الأداة التي تكتسب شعبية على Dev.to حيث يبحث المطورون عن بدائل ngrok بدون تكاليف مستمرة.

Cloudflare Tunnel (الأفضل للمشاريع القريبة من الإنتاج)

الأفضل لـ: الفرق التي تستخدم Cloudflare بالفعل، الأنفاق طويلة الأمد

cloudflared tunnel --url http://localhost:3000

الإيجابيات:

السلبيات:

الطبقة المجانية:

Localtunnel (الأبسط)

الأفضل لـ: اختبارات سريعة لمرة واحدة، لا يتطلب تثبيت

npx localtunnel --port 3000

الإيجابيات:

السلبيات:

الطبقة المجانية:

Tailscale Funnel (الأفضل للفرق)

الأفضل لـ: مشاركة الفريق الخاصة، عروض توضيحية آمنة

tailscale serve https / http://localhost:3000
tailscale funnel 443 on

الإيجابيات:

السلبيات:

الطبقة المجانية:

جدول المقارنة

الميزةngrokNPortCloudflare TunnelLocaltunnelTailscale
السعرمجاني/10 دولار+مجانيمجانيمجانيمجاني/مدفوع
حد الجلسةساعتانلا يوجدلا يوجدلا يوجدلا يوجد
نطاق مخصصمدفوعمجانينعملانعم
مفتش الطلباتنعمأساسيلالالا
تعقيد الإعدادمنخفضمنخفضمتوسطمنخفض جدًامتوسط
الموثوقيةممتازةجيدةممتازةضعيفةممتازة
الأفضل لـاختبار الإنتاجالمطورين الحريصين على التكلفةالمؤسساتالاختبارات السريعةمشاركة الفريق

إعداد نفق الخادم المحلي الأول الخاص بك

دعنا نمر بإعداد الأدوات الأكثر شيوعًا. سنستخدم واجهة برمجة تطبيقات Node.js Express كمثال، ولكن هذا يعمل مع أي خادم محلي.

مثال: خادم واجهة برمجة تطبيقات محلي

// server.js
const express = require('express');
const app = express();

app.use(express.json());

app.post('/webhook', (req, res) => {
  console.log('Webhook received:', req.body);
  res.json({ received: true });
});

app.get('/health', (req, res) => {
  res.json({ status: 'healthy' });
});

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

الخيار 1: استخدام ngrok

الخطوة 1: تثبيت ngrok

# macOS
brew install ngrok

# Windows (عبر Chocolatey)
choco install ngrok

# Linux
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | \
  sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && \
  echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | \
  sudo tee /etc/apt/sources.list.d/ngrok.list && \
  sudo apt update && sudo apt install ngrok

الخطوة 2: المصادقة (اختياري ولكن موصى به)

ngrok config add-authtoken YOUR_AUTH_TOKEN

الخطوة 3: بدء النفق

ngrok http 3000

الناتج:

Session Status                online
Account                       you@example.com (Plan: Free)
Version                       3.5.0
Region                        United States (us)
Forwarding                    https://abc123.ngrok.io -> http://localhost:3000

الآن يمكن الوصول إلى واجهة برمجة التطبيقات الخاصة بك على https://abc123.ngrok.io.

الخطوة 4: اختبرها

curl https://abc123.ngrok.io/health
# {"status":"healthy"}

الخيار 2: استخدام NPort (بديل مجاني)

الخطوة 1: تثبيت NPort

npm install -g nport-cli
# أو
curl -sSL https://nport.io/install.sh | bash

الخطوة 2: بدء النفق

nport start 3000 --subdomain myapi

الناتج:

✓ Tunnel started successfully
Public URL: https://myapi.nport.io
Local URL:  http://localhost:3000

الخطوة 3: اختبرها

curl https://myapi.nport.io/health
# {"status":"healthy"}

الخيار 3: استخدام Cloudflare Tunnel

الخطوة 1: تثبيت cloudflared

# macOS
brew install cloudflare/cloudflare/cloudflared

# Linux
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

الخطوة 2: نفق سريع (لا يتطلب التسجيل)

cloudflared tunnel --url http://localhost:3000

الناتج:

2026-01-27T12:00:00Z INF Your quick tunnel is: https://xyz789.trycloudflare.com

للأنفاق الدائمة (يتطلب حساب Cloudflare):

# تسجيل الدخول
cloudflared tunnel login

# إنشاء نفق
cloudflared tunnel create myapi

# التكوين والتشغيل
cloudflared tunnel --config config.yml run myapi

اختبار الويب هوك باستخدام Apidog

الآن بعد أن أصبح خادمك المحلي متاحًا للعامة، دعنا نختبر الويب هوك بشكل منهجي باستخدام Apidog.

لماذا نجمع بين Tunneling + Apidog؟

يقوم الـ Tunneling بحل مشكلة الوصول؛ ويقوم Apidog بحل مشكلة التحقق:

إعداد اختبار الويب هوك في Apidog

الخطوة 1: استيراد أو إنشاء واجهة برمجة التطبيقات الخاصة بك

  1. افتح Apidog

2. أنشئ مشروعًا جديدًا

3. أضف نقطة نهاية الويب هوك الخاصة بك:

الخطوة 2: تهيئة متغيرات البيئة

قم بإعداد بيئتين:

التطوير (المُنفق):

{
  "base_url": "https://abc123.ngrok.io"
}

الإنتاج:

{
  "base_url": "https://api.yourapp.com"
}

يتيح لك هذا اختبار نفس نقطة النهاية محليًا وفي بيئة الإنتاج بنقرة واحدة.

الخطوة 3: إنشاء سيناريوهات اختبار

اختبر ما يحدث عند وصول الويب هوكس:

مثال: اختبار ويب هوك دفع Stripe

// نص الطلب
{
  "type": "payment_intent.succeeded",
  "data": {
    "object": {
      "id": "pi_test123",
      "amount": 2000,
      "currency": "usd",
      "status": "succeeded"
    }
  }
}

التحققات في Apidog:

  1. رمز الحالة يساوي 200
  2. الاستجابة تحتوي على received: true
  3. وقت الاستجابة < 1000 مللي ثانية
  4. نوع المحتوى هو application/json

الخطوة 4: محاكاة خدمات الطرف الثالث

بدلاً من تفعيل رسائل الويب هوك حقيقية من Stripe أو GitHub، قم بمحاكاتها في Apidog:

  1. انسخ أمثلة حمولات الويب هوك من وثائق الخدمة
  2. أنشئ حالات اختبار مع سيناريوهات متنوعة (نجاح، فشل، حالات حافة)
  3. شغّل جميع السيناريوهات مقابل خادمك المحلي الذي تم تزويده بنفق
  4. تحقق من أن واجهة برمجة التطبيقات الخاصة بك تتعامل مع كل حالة بشكل صحيح

اختبار استدعاءات OAuth

السيناريو: أنت تقوم بتنفيذ "تسجيل الدخول باستخدام Google"

الخطوة 1: ابدأ النفق بنطاق فرعي مخصص

ngrok http 3000 --subdomain myapp
# عنوان URL: https://myapp.ngrok.io

الخطوة 2: تهيئة إعادة توجيه OAuth في Google Console

ضبط عنوان URL لإعادة التوجيه: https://myapp.ngrok.io/auth/google/callback

الخطوة 3: اختبر التدفق في Apidog

  1. قم بطلب إلى /auth/google للحصول على عنوان URL للترخيص
  2. اتبع إعادة التوجيه يدويًا أو برمجيًا
  3. تحقق من أن الاستدعاء يتلقى رمز التفويض
  4. تحقق من أن تبادل الرموز يعمل بشكل صحيح

الخطوة 4: التحقق من تخزين الرموز

استخدم Apidog من أجل:

حالات الاستخدام الشائعة

1. اختبار الويب هوك للدفع (Stripe, PayPal)

التحدي: يرسل مقدمو خدمات الدفع رسائل الويب هوك لأحداث مثل عمليات الشحن الناجحة، وعمليات استرداد الأموال، والنزاعات.

الحل:

# بدء النفق
ngrok http 3000

# تهيئة عنوان URL للويب هوك في لوحة تحكم Stripe
# https://abc123.ngrok.io/webhook/stripe

# استخدم Stripe CLI لإعادة توجيه الويب هوك التجريبية
stripe listen --forward-to localhost:3000/webhook/stripe

# تفعيل الأحداث التجريبية
stripe trigger payment_intent.succeeded

اختبار باستخدام Apidog:

2. اختبار أوامر روبوت Slack/Discord

التحدي: ترسل منصات الدردشة أحداث التفاعل عندما ينقر المستخدمون على الأزرار أو يشغلون الأوامر.

الحل:

# بدء النفق
nport start 3000 --subdomain myslackbot

# التكوين في Slack API:
# عنوان URL للتفاعل: https://myslackbot.nport.io/slack/interactions
# أوامر Slash: https://myslackbot.nport.io/slack/commands

اختبار باستخدام Apidog:

3. اختبار الويب هوك للرسائل النصية/المكالمات الصوتية (Twilio)

التحدي: ترسل Twilio رسائل الويب هوك عند وصول رسالة نصية أو استلام مكالمات صوتية.

الحل:

cloudflared tunnel --url http://localhost:3000

قم بتهيئة Twilio TwiML webhooks لتشير إلى عنوان URL الخاص بالنفق.

اختبار باستخدام Apidog:

4. اختبار واجهة برمجة تطبيقات تطبيقات الجوال

التحدي: اختبار واجهة برمجة التطبيقات الخاصة بك من جهاز فعلي أو محاكي.

مشكلة مع localhost:

// هذا يفشل من جهاز الجوال
fetch('http://localhost:3000/api/users')

الحل مع النفق:

// هذا يعمل من أي مكان
fetch('https://myapi.ngrok.io/api/users')

اختبار باستخدام Apidog:

  1. إنشاء وثائق واجهة برمجة التطبيقات مع عنوان URL الأساسي المُنفق
  2. مشاركتها مع فريق الجوال
  3. يمكن لمطوري الجوال الاختبار مقابل خادم التطوير المباشر الخاص بك
  4. التبديل إلى عناوين URL لبيئة الاختبار/الإنتاج عندما تكون جاهزًا

5. اختبار GitHub/GitLab Webhooks

التحدي: اختبار ويب هوك المستودع (الدفع، طلبات السحب، المشاكل) محليًا.

الحل:

# بدء النفق
ngrok http 4000

# التكوين في إعدادات مستودع GitHub:
# عنوان URL للويب هوك: https://abc123.ngrok.io/github/webhook
# نوع المحتوى: application/json
# الأحداث: الدفع، طلبات السحب

اختبار باستخدام Apidog:

أفضل ممارسات الأمان

إن كشف الخادم المحلي (localhost) على الإنترنت ينطوي على مخاطر أمنية. اتبع هذه الممارسات:

1. استخدم HTTPS فقط

توفر جميع خدمات الأنفاق HTTPS افتراضيًا. لا تستخدم أبدًا HTTP عاديًا للأنفاق:

# جيد
ngrok http 3000
# ينشئ https://abc123.ngrok.io

# سيء (لا تفعل هذا)
ngrok http --scheme=http 3000

2. تنفيذ التحقق من توقيع الويب هوك

لا تثق بالويب هوك الواردة بشكل أعمى. تحقق من التواقيع:

const crypto = require('crypto');

function verifyStripeSignature(payload, signature, secret) {
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature)
  );
}

app.post('/webhook/stripe', (req, res) => {
  const signature = req.headers['stripe-signature'];

  if (!verifyStripeSignature(req.body, signature, process.env.STRIPE_SECRET)) {
    return res.status(401).send('Invalid signature');
  }

  // معالجة الويب هوك
});

3. تقييد الوصول باستخدام Basic Auth

أضف المصادقة إلى النفق الخاص بك:

# ngrok مع مصادقة أساسية
ngrok http 3000 --auth="username:password"

# NPort مع مصادقة أساسية
nport start 3000 --auth username:password

الآن تحتاج الطلبات إلى بيانات اعتماد:

curl -u username:password https://abc123.ngrok.io/webhook

4. استخدم أسرارًا خاصة بالبيئة

لا تقم أبدًا بتضمين أسرار الويب هوك أو مفاتيح API في الكود:

// .env.development
STRIPE_WEBHOOK_SECRET=whsec_test_abc123
WEBHOOK_TUNNEL_URL=https://abc123.ngrok.io

// .env.production
STRIPE_WEBHOOK_SECRET=whsec_live_xyz789
WEBHOOK_URL=https://api.yourapp.com

5. مراقبة الوصول إلى النفق

استخدم مفتش الطلبات لمراقبة أي نشاط مشبوه:

# يوفر ngrok واجهة ويب على:
http://localhost:4040

# عرض جميع الطلبات، الاستجابات، إعادة تشغيل الهجمات

6. تحديد مدة النفق

لا تترك الأنفاق تعمل إلى أجل غير مسمى:

# انتهاء صلاحية النفق تلقائيًا بعد ساعة واحدة
ngrok http 3000 --session-duration 1h

7. التحقق من مصادر الطلبات

تحقق من عناوين IP الواردة أو استخدم قوائم السماح:

const allowedIPs = [
  '192.0.2.1',  // عناوين IP لـ Stripe webhook
  '198.51.100.0/24'
];

app.use('/webhook', (req, res, next) => {
  const clientIP = req.ip;

  if (!allowedIPs.includes(clientIP)) {
    return res.status(403).send('Forbidden');
  }

  next();
});

استكشاف المشاكل الشائعة وإصلاحها

المشكلة 1: يتغير عنوان URL الخاص بالنفق مع كل جلسة

المشكلة: تستخدم أنفاق ngrok المجانية عناوين URL عشوائية تتغير مع كل إعادة تشغيل. تتعطل رسائل الويب هوك التي تم تكوينها بعنوان URL القديم.

الحلول:

  1. استخدم خطة مدفوعة للحصول على عناوين URL ثابتة:
ngrok http 3000 --domain=myapp.ngrok.app
  1. التبديل إلى NPort مع نطاقات فرعية مخصصة مجانية:
nport start 3000 --subdomain myapp
# دائمًا https://myapp.nport.io
  1. تحديث رسائل الويب هوك برمجيًا عبر واجهة برمجة التطبيقات عند بدء النفق

المشكلة 2: انتهاء مهلة رسائل الويب هوك

المشكلة: يستغرق خادمك المحلي وقتًا طويلاً للرد. تتطلب خدمات مثل Slack ردودًا في غضون 3 ثوانٍ.

الحل:

المعالجة غير المتزامنة:

app.post('/webhook', async (req, res) => {
  // الاعتراف فورًا
  res.json({ received: true });

  // المعالجة في الخلفية
  processWebhookAsync(req.body).catch(console.error);
});

async function processWebhookAsync(data) {
  // قم بالعمل البطيء هنا (قاعدة البيانات، واجهات برمجة التطبيقات الخارجية، إلخ)
  await heavyProcessing(data);
}

اختبر انتهاء المهلة باستخدام Apidog عن طريق تعيين حدود مهلة قصوى في سيناريوهات الاختبار.

المشكلة 3: أخطاء CORS من المتصفح

المشكلة: الواجهة الأمامية التي تُجري طلبات إلى عنوان URL للنفق تحصل على أخطاء CORS.

الحل:

تهيئة رؤوس CORS:

const cors = require('cors');

app.use(cors({
  origin: [
    'http://localhost:3001',  // خادم الواجهة الأمامية الخاص بك للتطوير
    'https://abc123.ngrok.io'  // عنوان URL الخاص بالنفق الخاص بك
  ],
  credentials: true
}));

المشكلة 4: تحديد المعدل في الطبقة المجانية

المشكلة: الأنفاق المجانية لها قيود على الاتصال (ngrok: 40/دقيقة).

الحلول:

  1. طلبات الاختبار المجمعة في Apidog بدلاً من الاختبارات الفردية السريعة
  2. استخدم أنفاقًا متعددة لخدمات مختلفة
  3. الترقية إلى الطبقة المدفوعة إذا كان الاختبار مكثفًا
  4. التبديل إلى خدمة غير محدودة مثل Cloudflare Tunnel أو NPort

المشكلة 5: ينقطع النفق بشكل متكرر

المشكلة: عدم استقرار الشبكة يتسبب في انقطاع النفق.

الحل:

استخدم systemd/pm2 لإعادة التشغيل التلقائي:

# إنشاء خدمة systemd
sudo nano /etc/systemd/system/ngrok.service
[Unit]
Description=ngrok tunnel
After=network.target

[Service]
Type=simple
User=youruser
WorkingDirectory=/home/youruser
ExecStart=/usr/local/bin/ngrok http 3000
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl enable ngrok
sudo systemctl start ngrok

المشكلة 6: لا يمكن الوصول إلى النفق من شبكة معينة

المشكلة: جدران الحماية للشركات أو الشبكات المقيدة تحظر حركة مرور النفق.

الحلول:

  1. استخدم Cloudflare Tunnel (نادرًا ما يتم حظره)
  2. غيّر منطقة النفق لتقترب منك:
ngrok http 3000 --region eu
  1. استخدم Tailscale لشبكة خاصة بدلاً من النفق العام

الأنماط المتقدمة

النمط 1: نفق متعدد المنافذ

كشف خدمات متعددة في وقت واحد:

# الطرفية 1: خادم API
ngrok http 3000

# الطرفية 2: خادم تطوير الواجهة الأمامية
ngrok http 3001

# الطرفية 3: عامل الويب هوك
ngrok http 3002

أو استخدم ملف تكوين ngrok:

# ~/.ngrok2/ngrok.yml
tunnels:
  api:
    proto: http
    addr: 3000
  frontend:
    proto: http
    addr: 3001
  worker:
    proto: http
    addr: 3002
ngrok start --all

النمط 2: نفق + Docker Compose

# docker-compose.yml
version: '3'
services:
  api:
    build: .
    ports:
      - "3000:3000"

  ngrok:
    image: ngrok/ngrok:latest
    command:
      - "http"
      - "api:3000"
    environment:
      NGROK_AUTHTOKEN: ${NGROK_AUTHTOKEN}
docker-compose up

النمط 3: حقن عنوان URL ديناميكي للنفق

تحديث تطبيقك تلقائيًا بعنوان URL الخاص بالنفق:

// start-tunnel.js
const ngrok = require('ngrok');
const fs = require('fs');

(async function() {
  const url = await ngrok.connect(3000);
  console.log(`Tunnel started: ${url}`);

  // تحديث ملف .env
  fs.appendFileSync('.env', `\nTUNNEL_URL=${url}\n`);

  // تحديث webhook Stripe
  await updateStripeWebhook(url);
})();

النمط 4: إعادة توجيه الطلبات إلى بيئات متعددة

اختبر نفس الويب هوك مقابل بيئات التطوير، الاختبار، والإنتاج:

// webhook-multiplexer.js
app.post('/webhook', async (req, res) => {
  const environments = [
    'http://localhost:3000',
    'https://staging.api.com',
    'https://api.yourapp.com'
  ];

  // إعادة التوجيه إلى جميع البيئات
  const results = await Promise.all(
    environments.map(env =>
      fetch(`${env}/webhook`, {
        method: 'POST',
        headers: req.headers,
        body: JSON.stringify(req.body)
      })
    )
  );

  res.json({ forwarded: results.length });
});

الخاتمة

اختبار واجهات برمجة التطبيقات المحلية (localhost APIs) التي تتلقى رسائل الويب هوك أو الاستدعاءات لا يتطلب النشر إلى بيئة الاختبار لكل تغيير. تنشئ خدمات الأنفاق عناوين URL عامة مؤقتة تسمح للخدمات الخارجية بالوصول إلى بيئة التطوير الخاصة بك.

ابدأ بالطبقة المجانية لأي أداة. إذا أصبح اختبار الويب هوك جزءًا يوميًا من سير عملك، ففكر في الخطط المدفوعة للحصول على عناوين URL ثابتة وميزات إضافية. ولكن بالنسبة لمعظم المطورين، توفر خدمات الأنفاق المجانية، جنبًا إلى جنب مع إمكانيات اختبار واجهة برمجة التطبيقات في Apidog، كل ما يلزم لاختبار واجهات برمجة التطبيقات المحلية بفعالية.

button

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات