Cách Kiểm Tra API Localhost Bằng Webhook

Ashley Innocent

Ashley Innocent

28 tháng 1 2026

Cách Kiểm Tra API Localhost Bằng Webhook

Việc kiểm thử các API localhost cần nhận webhook hoặc callback từ các dịch vụ bên ngoài yêu cầu tạm thời phơi bày máy chủ phát triển cục bộ của bạn ra internet. Các dịch vụ tạo đường hầm (tunneling services) như ngrok, NPort, Cloudflare Tunnel và các dịch vụ khác tạo kết nối an toàn để cấp cho localhost của bạn một URL công khai.

💡
Tải xuống Apidog để theo dõi các quy trình kiểm thử webhook trong hướng dẫn này. Hướng dẫn này bao gồm cách chọn công cụ phù hợp, thiết lập đường hầm, kiểm thử webhook hiệu quả bằng Apidog và xử lý các thách thức phổ biến như xác thực, giới hạn tốc độ và gỡ lỗi.
button

Tại sao bạn cần tạo đường hầm localhost

Bạn đang xây dựng một API tích hợp với các dịch vụ của bên thứ ba. Mọi thứ hoạt động trên máy tính xách tay của bạn—các điểm cuối phản hồi chính xác, dữ liệu luân chuyển trơn tru. Sau đó, bạn cố gắng kiểm thử các callback webhook từ Stripe, GitHub, Twilio hoặc bất kỳ dịch vụ bên ngoài nào.

Vấn đề: Các dịch vụ bên ngoài không thể truy cập localhost:3000. Máy chủ phát triển của bạn không thể truy cập được từ internet.

Các tình huống phổ biến gây gián đoạn quy trình làm việc của bạn:

1. Kiểm thử Webhook

Các dịch vụ như Stripe gửi xác nhận thanh toán, GitHub gửi các sự kiện kho lưu trữ, Slack gửi các sự kiện tương tác—tất cả dưới dạng yêu cầu POST đến API của bạn. Trong quá trình phát triển, các dịch vụ này cần một URL công khai để gửi webhook đến.

Biểu đồ minh họa cách webhook hoạt động. Dịch vụ bên ngoài gửi webhook đến dịch vụ tunnelling, sau đó chuyển tiếp đến localhost của bạn.

2. URL callback OAuth

Khi triển khai "Đăng nhập bằng Google", "Đăng nhập bằng GitHub" hoặc bất kỳ luồng OAuth nào, nhà cung cấp xác thực sẽ chuyển hướng người dùng trở lại ứng dụng của bạn bằng một mã ủy quyền. URL chuyển hướng phải có thể truy cập công khai và khớp với những gì bạn đã đăng ký với nhà cung cấp.

Biểu đồ minh họa luồng OAuth. Người dùng truy cập dịch vụ bên ngoài, được chuyển hướng đến localhost thông qua dịch vụ tunneling.

3. Tích hợp API của bên thứ ba

Một số API yêu cầu URL callback cho các hoạt động bất đồng bộ. Ví dụ, các dịch vụ chuyển mã video thông báo cho API của bạn khi quá trình xử lý hoàn tất, hoặc các bộ xử lý thanh toán xác nhận giao dịch.

4. Phát triển ứng dụng di động

Kiểm thử API của bạn từ thiết bị di động trên cùng một mạng thường thất bại vì ứng dụng di động không thể phân giải localhost. Một đường hầm cung cấp cho bạn một URL hoạt động từ bất kỳ thiết bị nào.

5. Demo cho khách hàng

Đôi khi bạn cần trình diễn công việc đang tiến hành cho khách hàng hoặc các bên liên quan. Triển khai lên môi trường staging cho mỗi thay đổi nhỏ làm chậm quá trình lặp lại. Một URL công khai tạm thời cho phép khách hàng kiểm thử môi trường phát triển của bạn.

Cách tạo đường hầm localhost hoạt động

Các dịch vụ tạo đường hầm tạo một kết nối an toàn giữa máy chủ đám mây của họ và máy cục bộ của bạn:

Dịch vụ bên ngoài → Dịch vụ tạo đường hầm (URL công khai) → Kết nối an toàn → Localhost:3000 của bạn

Quy trình:

  1. Bạn khởi động một ứng dụng khách đường hầm trên máy của mình, trỏ đến cổng cục bộ của bạn
  2. Ứng dụng khách kết nối đến cơ sở hạ tầng đám mây của dịch vụ tạo đường hầm
  3. Dịch vụ gán một URL công khai (ví dụ: https://abc123.ngrok.io)
  4. Các yêu cầu đến URL công khai đó được chuyển tiếp qua kết nối được mã hóa đến localhost của bạn
  5. Máy chủ cục bộ của bạn nhận được yêu cầu như thể nó đến trực tiếp từ ứng dụng khách
  6. Các phản hồi chảy ngược lại qua đường hầm đến người yêu cầu

Điều này diễn ra một cách minh bạch. Máy chủ cục bộ của bạn không cần biết nó đang ở phía sau một đường hầm.

So sánh các dịch vụ tạo đường hầm phổ biến

Dưới đây là các lựa chọn phổ biến nhất vào năm 2026, với những ưu điểm và hạn chế của chúng:

ngrok (Phổ biến nhất)

Tốt nhất cho: Các dự án đã có, các nhóm muốn độ tin cậy

ngrok http 3000
Giao diện dòng lệnh của ngrok đang chạy, hiển thị URL chuyển tiếp công khai.

Ưu điểm:

Nhược điểm:

Gói miễn phí:

Các gói trả phí: 8-20 USD/tháng

Trang giá của ngrok hiển thị các gói Free, Pro, Business và Enterprise.

NPort (Giải pháp thay thế miễn phí đang nổi lên)

Tốt nhất cho: Các nhà phát triển muốn tránh chi phí đăng ký

Giao diện dòng lệnh của NPort đang chạy, hiển thị URL công khai và URL cục bộ.
nport start 3000

Ưu điểm:

Nhược điểm:

Gói miễn phí:

Đây là công cụ đang thu hút sự chú ý trên Dev.to khi các nhà phát triển tìm kiếm các giải pháp thay thế ngrok mà không phải trả chi phí liên tục.

Cloudflare Tunnel (Tốt nhất cho môi trường gần với sản phẩm)

Tốt nhất cho: Các nhóm đã sử dụng Cloudflare, đường hầm chạy dài hạn

Giao diện dòng lệnh của Cloudflared đang chạy, hiển thị thông tin về đường hầm.
cloudflared tunnel --url http://localhost:3000

Ưu điểm:

Nhược điểm:

Gói miễn phí:

Localtunnel (Đơn giản nhất)

Tốt nhất cho: Kiểm thử nhanh chóng một lần, không cần cài đặt

npx localtunnel --port 3000

Ưu điểm:

Nhược điểm:

Gói miễn phí:

Tailscale Funnel (Tốt nhất cho các nhóm)

Tốt nhất cho: Chia sẻ nhóm riêng tư, demo an toàn

Giao diện dòng lệnh của Tailscale Funnel đang chạy, hiển thị các URL được phục vụ.
tailscale serve https / http://localhost:3000
tailscale funnel 443 on

Ưu điểm:

Nhược điểm:

Gói miễn phí:

Bảng so sánh

Tính năngngrokNPortCloudflare TunnelLocaltunnelTailscale
GiáMiễn phí/10$+Miễn phíMiễn phíMiễn phíMiễn phí/Trả phí
Giới hạn phiên2 giờKhôngKhôngKhôngKhông
Tên miền tùy chỉnhTrả phíMiễn phíKhông
Trình kiểm tra yêu cầuCơ bảnKhôngKhôngKhông
Độ phức tạp thiết lậpThấpThấpTrung bìnhRất thấpTrung bình
Độ tin cậyTuyệt vờiTốtTuyệt vờiKémTuyệt vời
Tốt nhất choKiểm thử sản phẩmNhà phát triển chú trọng chi phíDoanh nghiệpKiểm thử nhanhChia sẻ nhóm

Thiết lập đường hầm localhost đầu tiên của bạn

Hãy cùng tìm hiểu cách thiết lập với các công cụ phổ biến nhất. Chúng ta sẽ sử dụng API Node.js Express làm ví dụ, nhưng điều này hoạt động với bất kỳ máy chủ cục bộ nào.

Ví dụ: Máy chủ API cục bộ

// 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');
});

Tùy chọn 1: Sử dụng ngrok

Bước 1: Cài đặt ngrok

# macOS
brew install ngrok

# Windows (qua 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

Bước 2: Xác thực (tùy chọn nhưng được khuyến nghị)

ngrok config add-authtoken YOUR_AUTH_TOKEN

Bước 3: Khởi động đường hầm

ngrok http 3000

Đầu ra:

Trạng thái phiên                trực tuyến
Tài khoản                       you@example.com (Gói: Miễn phí)
Phiên bản                       3.5.0
Khu vực                         Hoa Kỳ (us)
Chuyển tiếp                     https://abc123.ngrok.io -> http://localhost:3000

API của bạn hiện có thể truy cập được tại https://abc123.ngrok.io.

Bước 4: Kiểm thử nó

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

Tùy chọn 2: Sử dụng NPort (Giải pháp thay thế miễn phí)

Bước 1: Cài đặt NPort

npm install -g nport-cli
# hoặc
curl -sSL https://nport.io/install.sh | bash

Bước 2: Khởi động đường hầm

nport start 3000 --subdomain myapi

Đầu ra:

✓ Đường hầm đã khởi động thành công
URL công khai: https://myapi.nport.io
URL cục bộ:  http://localhost:3000

Bước 3: Kiểm thử nó

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

Tùy chọn 3: Sử dụng Cloudflare Tunnel

Bước 1: Cài đặt 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

Bước 2: Đường hầm nhanh (không cần đăng ký)

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

Đầu ra:

2026-01-27T12:00:00Z INF Đường hầm nhanh của bạn là: https://xyz789.trycloudflare.com

Đối với các đường hầm cố định (yêu cầu tài khoản Cloudflare):

# Đăng nhập
cloudflared tunnel login

# Tạo đường hầm
cloudflared tunnel create myapi

# Cấu hình và chạy
cloudflared tunnel --config config.yml run myapi

Kiểm thử Webhook với Apidog

Bây giờ localhost của bạn đã có thể truy cập công khai, hãy kiểm thử webhook một cách có hệ thống bằng cách sử dụng Apidog.

Tại sao nên kết hợp Tunneling + Apidog?

Tạo đường hầm giải quyết vấn đề truy cập; Apidog giải quyết vấn đề xác minh:

Thiết lập kiểm thử Webhook trong Apidog

Bước 1: Nhập hoặc Tạo API của bạn

  1. Mở Apidog
Màn hình giao diện Apidog.

2. Tạo một dự án mới

Màn hình trong Apidog để tạo một dự án mới.

3. Thêm điểm cuối webhook của bạn:

Màn hình Apidog để thêm điểm cuối API, bao gồm phương thức, URL và tiêu đề.

Bước 2: Cấu hình biến môi trường

Thiết lập hai môi trường:

Phát triển (Được tạo đường hầm):

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

Sản xuất:

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

Điều này cho phép bạn kiểm thử cùng một điểm cuối cục bộ và trong môi trường sản xuất chỉ với một cú nhấp chuột.

Bước 3: Tạo kịch bản kiểm thử

Kiểm thử điều gì xảy ra khi webhook đến:

Ví dụ: Kiểm thử Webhook thanh toán Stripe

// Nội dung yêu cầu
{
  "type": "payment_intent.succeeded",
  "data": {
    "object": {
      "id": "pi_test123",
      "amount": 2000,
      "currency": "usd",
      "status": "succeeded"
    }
  }
}

Các xác nhận trong Apidog:

  1. Mã trạng thái bằng 200
  2. Phản hồi chứa received: true
  3. Thời gian phản hồi < 1000ms
  4. Content-Type là application/json

Bước 4: Mô phỏng dịch vụ bên thứ ba

Thay vì kích hoạt webhook thực từ Stripe hoặc GitHub, hãy mô phỏng chúng trong Apidog:

  1. Sao chép ví dụ tải trọng webhook từ tài liệu dịch vụ
  2. Tạo các trường hợp kiểm thử với nhiều kịch bản khác nhau (thành công, thất bại, các trường hợp biên)
  3. Chạy tất cả các kịch bản đối với localhost đã tạo đường hầm của bạn
  4. Xác minh API của bạn xử lý từng trường hợp một cách chính xác

Kiểm thử callback OAuth

Tình huống: Bạn đang triển khai "Đăng nhập bằng Google"

Bước 1: Khởi động đường hầm với tên miền phụ tùy chỉnh

ngrok http 3000 --subdomain myapp
# URL: https://myapp.ngrok.io

Bước 2: Cấu hình chuyển hướng OAuth trong Google Console

Đặt URL callback: https://myapp.ngrok.io/auth/google/callback

Bước 3: Kiểm thử luồng trong Apidog

  1. Thực hiện yêu cầu đến /auth/google để lấy URL ủy quyền
  2. Thực hiện chuyển hướng thủ công hoặc theo chương trình
  3. Xác minh callback nhận được mã ủy quyền
  4. Xác nhận trao đổi mã thông báo hoạt động chính xác

Bước 4: Xác thực lưu trữ mã thông báo

Sử dụng Apidog để:

Các trường hợp sử dụng phổ biến

1. Kiểm thử Webhook thanh toán (Stripe, PayPal)

Thách thức: Các nhà cung cấp thanh toán gửi webhook cho các sự kiện như giao dịch thành công, hoàn tiền, tranh chấp.

Giải pháp:

# Khởi động đường hầm
ngrok http 3000

# Cấu hình URL webhook trong bảng điều khiển Stripe
# https://abc123.ngrok.io/webhook/stripe

# Sử dụng Stripe CLI để chuyển tiếp webhook kiểm thử
stripe listen --forward-to localhost:3000/webhook/stripe

# Kích hoạt các sự kiện kiểm thử
stripe trigger payment_intent.succeeded

Kiểm thử với Apidog:

2. Kiểm thử lệnh Bot Slack/Discord

Thách thức: Các nền tảng trò chuyện gửi các sự kiện tương tác khi người dùng nhấp vào nút hoặc chạy lệnh.

Giải pháp:

# Khởi động đường hầm
nport start 3000 --subdomain myslackbot

# Cấu hình trong Slack API:
# URL tương tác: https://myslackbot.nport.io/slack/interactions
# Lệnh Slash: https://myslackbot.nport.io/slack/commands

Kiểm thử với Apidog:

3. Kiểm thử Webhook SMS/Voice (Twilio)

Thách thức: Twilio gửi webhook khi SMS đến hoặc cuộc gọi thoại được nhận.

Giải pháp:

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

Cấu hình webhook TwiML để trỏ đến URL đường hầm của bạn.

Kiểm thử với Apidog:

4. Kiểm thử API ứng dụng di động

Thách thức: Kiểm thử API của bạn từ một thiết bị vật lý hoặc trình giả lập.

Vấn đề với localhost:

// Điều này không hoạt động từ thiết bị di động
fetch('http://localhost:3000/api/users')

Giải pháp với đường hầm:

// Điều này hoạt động từ mọi nơi
fetch('https://myapi.ngrok.io/api/users')

Kiểm thử với Apidog:

  1. Tạo tài liệu API với URL cơ sở đã tạo đường hầm
  2. Chia sẻ với nhóm di động
  3. Các nhà phát triển di động có thể kiểm thử với máy chủ phát triển trực tiếp của bạn
  4. Chuyển sang URL staging/production khi sẵn sàng

5. Kiểm thử Webhook GitHub/GitLab

Thách thức: Kiểm thử webhook kho lưu trữ (push, pull request, issues) cục bộ.

Giải pháp:

# Khởi động đường hầm
ngrok http 4000

# Cấu hình trong cài đặt kho lưu trữ GitHub:
# URL Webhook: https://abc123.ngrok.io/github/webhook
# Loại nội dung: application/json
# Sự kiện: Push, Pull requests

Kiểm thử với Apidog:

Các phương pháp bảo mật tốt nhất

Việc phơi bày localhost ra internet tạo ra rủi ro bảo mật. Hãy tuân theo các phương pháp sau:

1. Chỉ sử dụng HTTPS

Tất cả các dịch vụ tạo đường hầm đều cung cấp HTTPS theo mặc định. Không bao giờ sử dụng HTTP thuần túy cho đường hầm:

# Tốt
ngrok http 3000
# Tạo https://abc123.ngrok.io

# Xấu (đừng làm điều này)
ngrok http --scheme=http 3000

2. Triển khai xác minh chữ ký Webhook

Đừng tin tưởng mù quáng vào các webhook đến. Hãy xác minh chữ ký:

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('Chữ ký không hợp lệ');
  }

  // Xử lý webhook
});

3. Hạn chế truy cập bằng Xác thực cơ bản (Basic Auth)

Thêm xác thực vào đường hầm của bạn:

# ngrok với xác thực cơ bản
ngrok http 3000 --auth="username:password"

# NPort với xác thực cơ bản
nport start 3000 --auth username:password

Bây giờ các yêu cầu cần thông tin đăng nhập:

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

4. Sử dụng bí mật cụ thể cho môi trường

Không bao giờ commit bí mật webhook hoặc khóa 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. Giám sát truy cập đường hầm

Sử dụng trình kiểm tra yêu cầu để theo dõi hoạt động đáng ngờ:

# ngrok cung cấp giao diện web tại:
http://localhost:4040

# Xem tất cả các yêu cầu, phản hồi, phát lại các cuộc tấn công

6. Giới hạn thời gian đường hầm

Đừng để đường hầm chạy vô thời hạn:

# Tự động hết hạn đường hầm sau 1 giờ
ngrok http 3000 --session-duration 1h

7. Xác thực nguồn yêu cầu

Kiểm tra địa chỉ IP đến hoặc sử dụng danh sách cho phép (allowlists):

const allowedIPs = [
  '192.0.2.1',  // IP webhook của Stripe
  '198.51.100.0/24'
];

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

  if (!allowedIPs.includes(clientIP)) {
    return res.status(403).send('Bị cấm');
  }

  next();
});

Khắc phục sự cố thường gặp

Vấn đề 1: URL đường hầm thay đổi mỗi phiên

Vấn đề: Các đường hầm ngrok miễn phí sử dụng các URL ngẫu nhiên thay đổi mỗi khi khởi động lại. Webhook được cấu hình với URL cũ sẽ bị hỏng.

Giải pháp:

  1. Sử dụng gói trả phí cho các URL tĩnh:
ngrok http 3000 --domain=myapp.ngrok.app
  1. Chuyển sang NPort với tên miền phụ tùy chỉnh miễn phí:
nport start 3000 --subdomain myapp
# Luôn luôn https://myapp.nport.io
  1. Cập nhật webhook theo chương trình qua API khi đường hầm bắt đầu

Vấn đề 2: Webhook hết thời gian chờ

Vấn đề: Máy chủ cục bộ của bạn mất quá nhiều thời gian để phản hồi. Các dịch vụ như Slack yêu cầu phản hồi trong vòng 3 giây.

Giải pháp:

Xử lý bất đồng bộ:

app.post('/webhook', async (req, res) => {
  // Xác nhận ngay lập tức
  res.json({ received: true });

  // Xử lý trong nền
  processWebhookAsync(req.body).catch(console.error);
});

async function processWebhookAsync(data) {
  // Thực hiện công việc chậm ở đây (cơ sở dữ liệu, API bên ngoài, v.v.)
  await heavyProcessing(data);
}

Kiểm thử thời gian chờ với Apidog bằng cách đặt giới hạn thời gian chờ nghiêm ngặt trong các kịch bản kiểm thử.

Vấn đề 3: Lỗi CORS từ trình duyệt

Vấn đề: Giao diện người dùng thực hiện yêu cầu đến URL đường hầm nhận được lỗi CORS.

Giải pháp:

Cấu hình tiêu đề CORS:

const cors = require('cors');

app.use(cors({
  origin: [
    'http://localhost:3001',  // Máy chủ dev frontend của bạn
    'https://abc123.ngrok.io'  // URL đường hầm của bạn
  ],
  credentials: true
}));

Vấn đề 4: Giới hạn tốc độ trên gói miễn phí

Vấn đề: Các đường hầm miễn phí có giới hạn kết nối (ngrok: 40/phút).

Giải pháp:

  1. Tạo các yêu cầu kiểm thử theo nhóm trong Apidog thay vì kiểm thử từng yêu cầu nhanh chóng
  2. Sử dụng nhiều đường hầm cho các dịch vụ khác nhau
  3. Nâng cấp lên gói trả phí nếu kiểm thử nhiều
  4. Chuyển sang dịch vụ không giới hạn như Cloudflare Tunnel hoặc NPort

Vấn đề 5: Đường hầm thường xuyên bị ngắt kết nối

Vấn đề: Sự mất ổn định mạng gây ra việc ngắt kết nối đường hầm.

Giải pháp:

Sử dụng systemd/pm2 để tự động khởi động lại:

# Tạo dịch vụ systemd
sudo nano /etc/systemd/system/ngrok.service
[Unit]
Description=đường hầm ngrok
After=network.target

[Service]
Type=simple
User=tênngườidùngcủa_bạn
WorkingDirectory=/home/tênngườidùngcủa_bạn
ExecStart=/usr/local/bin/ngrok http 3000
Restart=always
RestartSec=10

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

Vấn đề 6: Không thể truy cập đường hầm từ một mạng cụ thể

Vấn đề: Tường lửa công ty hoặc mạng hạn chế chặn lưu lượng đường hầm.

Giải pháp:

  1. Sử dụng Cloudflare Tunnel (hiếm khi bị chặn)
  2. Chuyển đổi khu vực đường hầm gần bạn hơn:
ngrok http 3000 --region eu
  1. Sử dụng Tailscale cho mạng riêng thay vì đường hầm công cộng

Các mô hình nâng cao

Mô hình 1: Tạo đường hầm đa cổng

Phơi bày nhiều dịch vụ đồng thời:

# Thiết bị đầu cuối 1: Máy chủ API
ngrok http 3000

# Thiết bị đầu cuối 2: Máy chủ dev Frontend
ngrok http 3001

# Thiết bị đầu cuối 3: Worker webhook
ngrok http 3002

Hoặc sử dụng tệp cấu hình ngrok:

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

Mô hình 2: Đường hầm + 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

Mô hình 3: Tiêm URL đường hầm động

Tự động cập nhật ứng dụng của bạn với URL đường hầm:

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

(async function() {
  const url = await ngrok.connect(3000);
  console.log(`Đường hầm đã khởi động: ${url}`);

  // Cập nhật tệp .env
  fs.appendFileSync('.env', `\nTUNNEL_URL=${url}\n`);

  // Cập nhật webhook Stripe
  await updateStripeWebhook(url);
})();

Mô hình 4: Chuyển tiếp yêu cầu đến nhiều môi trường

Kiểm thử cùng một webhook đối với môi trường dev, staging và production:

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

  // Chuyển tiếp đến tất cả các môi trường
  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 });
});

Kết luận

Kiểm thử các API localhost nhận webhook hoặc callback không yêu cầu triển khai lên môi trường staging cho mỗi thay đổi. Các dịch vụ tạo đường hầm tạo ra các URL công khai tạm thời cho phép các dịch vụ bên ngoài truy cập môi trường phát triển của bạn.

Hãy bắt đầu với gói miễn phí của bất kỳ công cụ nào. Nếu kiểm thử webhook trở thành một phần hàng ngày trong quy trình làm việc của bạn, hãy cân nhắc các gói trả phí để có các URL tĩnh và các tính năng bổ sung. Nhưng đối với hầu hết các nhà phát triển, các dịch vụ tạo đường hầm miễn phí kết hợp với khả năng kiểm thử API của Apidog cung cấp mọi thứ cần thiết để kiểm thử API localhost một cách hiệu quả.

button

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API