荷物追跡のためのWebhookベストプラクティス
Webhookを使用すると、荷物のステータスが変更された際にリアルタイムで通知を受け取ることができます。APIを繰り返しポーリングする代わりに、更新情報が自動的に届くのを待つだけで済みます。
なぜWebhookを使うのか?
- リアルタイム更新 - 荷物のステータスが変わった瞬間に把握できます
- API呼び出しの削減 - 数分ごとにポーリングする必要がなくなります
- ユーザー体験の向上 - お客様に即座に通知を届けられます
- コスト効率 - API使用量が減り、コストを抑えられます
Webhookエンドポイントの設定
Webhookエンドポイントには以下の要件があります:
POSTリクエストを受け付けること- 5秒以内に
200ステータスコードを返すこと - 重複イベントを適切に処理できること
// Express.js の例
app.post('/webhooks/whereparcel', (req, res) => {
const { event, data } = req.body;
// 常に素早くレスポンスを返す
res.status(200).json({ received: true });
// イベントを非同期で処理する
processTrackingEvent(event, data);
});
セキュリティ:Webhook署名の検証
すべてのWebhookリクエストにはX-Webhook-Signatureヘッダーが含まれています。リクエストがWhereParcelから送信されたものであることを確認するために、必ずこの署名を検証してください:
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
失敗時の処理
エンドポイントが利用できない場合、WhereParcelは指数バックオフで再試行を行います:
| 試行 | 遅延時間 |
|---|---|
| 1回目の再試行 | 1分 |
| 2回目の再試行 | 5分 |
| 3回目の再試行 | 30分 |
| 4回目の再試行 | 2時間 |
| 5回目の再試行 | 12時間 |
5回の再試行がすべて失敗した場合、Webhookは失敗としてマークされ、メールで通知が届きます。
ベストプラクティスまとめ
- 素早くレスポンスを返す - 5秒以内に200を返すこと
- 非同期で処理する - レスポンスをブロックしないこと
- 署名を検証する - 常に
X-Webhook-Signatureを確認すること - 重複を適切に処理する - 冪等性キーを使用すること
- エンドポイントを監視する - 障害時のアラートを設定すること
詳細については、Webhook APIドキュメントをご覧ください。