mcpField
I
idempotency-handling

idempotency-handling

github.com/aj-geddes開発373463 回インストール34 週間前に更新
リポジトリ

idempotency-handling について

繰り返し実行しても一貫した結果を返す、冪等操作を実装する開発スキルです。一般的なリトライ場面を扱い、リクエストとレスポンスの保存や検証方法を示します。

主な機能

  1. 01変更操作の冪等キー
  2. 02リクエストとレスポンスの保存
  3. 03リクエストボディの検証
  4. 04同時リクエストの処理
  5. 05重複リクエストへの一貫した応答
  6. 06冪等性レコードの整理

活用シーン

  1. 01決済処理の重複防止
  2. 02API エンドポイントのリトライ対応
  3. 03重複する Webhook やコールバックの処理
  4. 04メッセージキュー操作の重複防止

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill idempotency-handling

インストール後、Claude Code で/idempotency-handlingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
database-based-idempotency.md
express-idempotency-middleware.md
message-queue-idempotency.md
stripe-style-idempotency.md
scripts/
validate-api.sh
templates/
api-scaffold.yaml

詳細

冪等性の処理

目次

概要

操作の実行回数にかかわらず同じ結果が得られるように、冪等性を実装します。

使用する場面

  • 決済処理
  • リトライを伴う API エンドポイント
  • Webhook とコールバック
  • メッセージキューのコンシューマー
  • 分散トランザクション
  • 銀行振込
  • 注文の作成
  • メールの送信
  • リソースの作成

クイックスタート

最小限の動作例:

import express from "express";
import Redis from "ioredis";
import crypto from "crypto";

interface IdempotentRequest {
  key: string;
  status: "processing" | "completed" | "failed";
  response?: any;
  error?: string;
  createdAt: number;
  completedAt?: number;
}

class IdempotencyService {
  private redis: Redis;
  private ttl = 86400; // 24 hours

  constructor(redisUrl: string) {
    this.redis = new Redis(redisUrl);
  }

  async getRequest(key: string): Promise<IdempotentRequest | null> {
    const data = await this.redis.get(`idempotency:${key}`);
    return data ? JSON.parse(data) : null;
  }
// ... (see reference guides for full implementation)

リファレンスガイド

詳細な実装は references/ ディレクトリにあります。

ガイド内容
Express 冪等性ミドルウェアExpress 冪等性ミドルウェア
データベースベースの冪等性データベースベースの冪等性
Stripe スタイルの冪等性Stripe スタイルの冪等性
メッセージキューの冪等性メッセージキューの冪等性

ベストプラクティス

✅ 推奨事項
  • 更新処理では冪等性キーを必須にします
  • リクエストとレスポンスを一緒に保存します
  • 冪等性レコードに適切な TTL を設定します
  • リクエスト本文が保存済みのリクエストと一致することを検証します
  • 同時リクエストを適切に処理します
  • 重複リクエストには同じレスポンスを返します
  • 古い冪等性レコードをクリーンアップします
  • アトミック性を確保するためにデータベース制約を使用します
❌ 禁止事項
  • GET リクエストに冪等性を適用しないでください
  • 冪等性データを永久に保存しないでください
  • リクエスト本文の検証を省略しないでください
  • 一意でない冪等性キーを使用しないでください
  • 同じリクエストを同時に処理しないでください
  • 重複リクエストへのレスポンスを変更しないでください

コメント