DEV Community

waterlily
waterlily

Posted on

EchoAPIの動的値・カスタム関数:強力な機能のすべて

動的値とカスタム関数は、EchoAPIがAPIデバッグの効率化と複雑なビジネスロジックへの対応を実現する中核機能です。マルチステップのデバッグ作業、動的パラメータの依存関係管理、地域特有の要件への対応において、特に重要な役割を果たします。ここでは、具体的なユースケースを交えながら詳細に解説します。

一、動的値:「シナリオ依存パラメータ」へのシームレスな対応

動的値とは、手動での入力を必要とせず、ツールが自動生成またはリアルタイムで取得するパラメータ(例:タイムスタンプ、ランダム値、前段APIのレスポンス値など)を指します。これにより、「パラメータ値の動的な変化」や「複数API間でのパラメータ連携」といった課題を効果的に解決します。

EchoAPI動的値.png

具体例:ECサイトの注文作成→決済処理のAPI連鎖検証(API間パラメータ連携)

シナリオ

あるアメリカのECプラットフォーム開発者が「注文作成 → 支払い開始」のAPIフローをデバッグする際の流れ:

1. 注文作成 API:呼び出しにより、毎回新規生成されるユニークな orderId が返却される。
  • モックデータ関数をクリック EchoAPI注文作成 API.png
  • 関数を選択して挿入 EchoAPI関数を選択し挿入.png
  • API実行によりランダム関数で生成された値を確認 EchoAPIAPI 実行でランダム関数の値を確認.png
  • スクリプト実行により環境変数を作成 EchoAPIスクリプト実行で環境変数を作成.png
  • orderId を環境変数として保存 EchoAPI環境変数として保存.png
2. 決済 API: 前段で生成された orderId が必須パラメータ。加えて、リクエストの新鮮さを担保する timestamp(タイムスタンプ)と、リプレイ攻撃対策のための nonce(ランダム文字列)が必要。

7.png
8.png

動的値の活用方法

  1. 注文作成API実行後、EchoAPIの「動的値 - 後処理」機能を用いて orderId を自動抽出し、環境変数に設定します。
  2. 決済API呼び出し時に、以下のように動的値を選択:
    • orderId:環境変数から参照
    • timestamp:システム動的値 → 時間(ミリ秒単位の現在時刻を自動生成)
    • nonce:システム動的値 → ランダム文字列(規定フォーマットに合致した値を自動生成) EchoAPI動的値の使い方.png

主なメリット

  • 手動入力ミスの排除orderId やタイムスタンプを手動で入力(コピー&ペースト含む)する必要がなく、誤入力(桁抜け、フォーマット誤りなど)によるデバッグ失敗を防止します。
  • デバッグ効率の大幅な向上:API間で依存関係にあるパラメータの受け渡しが自動化され、通常5分程度かかる手動作業を1分以内に短縮可能です。
  • 多地域・多タイムゾーンへの柔軟な対応:UTC、JST(日本時間)、PST/PDT(米国西部時間)、WIB(インドネシア時間)など、各地域のタイムゾーンに応じた日時を自動生成できるため、タイムゾーンの差異を意識することなくデバッグを進められます。

二、EchoAPI システム基本動的値の詳細

EchoAPIには、追加の設定なしですぐに利用できる、よく使われる基本パラメータをリアルタイム生成する システムベースの動的値 機能が標準搭載されています。デフォルトで豊富な種類が用意されており、APIデバッグで一般的に必要とされるパラメータ要件の大部分を網羅します。

1. 時間系動的値

最も頻繁に利用される動的値のカテゴリーです。タイムスタンプや特定フォーマットの日時文字列が必要な様々な場面で活用できます。多様なタイムゾーンにも対応しています。

動的値名 形式例 説明 利用シーン
Unix タイムスタンプ(ミリ秒) 1620000000000 1970-01-01 00:00:00 UTCからの経過ミリ秒数 リプレイ攻撃防止、処理時刻の記録
Unix タイムスタンプ(秒) 1620000000 同上、ただし秒単位 秒単位のタイムスタンプを要求するAPI
UTC 時間文字列 2023-06-15T12:00:00Z Z(ゼット)タイムゾーンサフィックス付きのISO 8601標準形式 国際的な規格に準拠したAPI
ローカル時間文字列 2023-06-15 20:00:00 実行環境のシステムタイムゾーンに依存した日時表現 ローカル環境や特定の業務システム向けAPI
日本時間(JST) 2023-06-15 21:00:00 UTC+9時間(日本標準時) 日本市場向けのAPI
インドネシア時間(WIB) 2023-06-15 19:00:00 UTC+7時間(西部インドネシア時間) インドネシア向けのAPI
米国西部時間(PST/PDT) 2023-06-15 05:00:00 太平洋時間(夏時間あり) 米国西海岸のサービス向けAPI
日付文字列(YYYY-MM-DD) 2023-06-15 年-月-日のフォーマット 日付のみを指定するAPIパラメータ
相対時間計算 現在時刻+1時間 現在時刻からの相対的な時間(未来や過去)を指定可能 トークンの有効期限など

利点:異なるタイムゾーンやフォーマットの時刻を簡単かつ正確に生成できるため、グローバルな業務や多地域展開するサービスにおけるAPI連携のデバッグが効率化されます。

2. ランダム系動的値

リプレイ攻撃防止やテストデータの生成など、予測不可能な値や一意な値が必要なシーンで活用できます。形式や範囲の指定も可能です。

動的値名 説明 利用シーン
ランダム整数 12345 指定可能な範囲内でランダムな整数を生成(例:1000–9999) テスト用の一意なID生成
ランダム文字列 x7Bp9Q 指定可能な長さ、文字種でランダムな文字列を生成 nonce(一度きりの乱数)によるリプレイ防止
ランダム UUID f47ac10b-58cc-4372-a567-0e02b2c3d479 バージョン4のUUID(Universally Unique Identifier)を生成 グローバルで一意な識別子の生成
ランダム真偽値 true / false 真(true)または偽(false)をランダムに生成 条件分岐のテスト
ランダムメールアドレス test_123@example.com 利用可能なメールアドレス形式のランダム文字列を生成 テスト用ユーザーアカウントの生成
ランダム電話番号 +12065551234 指定可能な国コード付きのランダムな電話番号を生成 テスト用ユーザーの電話番号
ランダム IP アドレス 192.168.1.1 有効なIPv4アドレス形式のランダム値を生成 IPアドレスごとの制限をテストするAPI

利点:業務やテストの仕様に合わせた様々な形式のテストデータを自動生成できるため、手動でのダミーデータ作成の手間を大幅に省き、デバッグの効率化と品質向上に貢献します。

3. 環境情報動的値

現在のデバッグ実行環境に関する情報を取得します。環境の識別や、環境に依存した処理を行う際に利用します。

名称 説明 利用シーン
プロジェクト ID proj_123456 現在作業中のEchoAPIプロジェクトを一意に識別するID ログの追跡や管理
環境名 production 現在選択されている実行環境(例:development, staging, production) 環境に応じた処理の分岐
ローカル IP アドレス 192.168.1.150 実行しているマシンのローカルネットワークIPアドレス IPアドレスの固定が必要なAPIのテスト
ホスト名 my-laptop 実行しているマシンのホスト名 デバイス識別
EchoAPI バージョン 2.3.0 使用中のEchoAPIのバージョン番号 互換性の確認や問い合わせ時
OS Windows 10 実行環境のオペレーティングシステム OS固有の挙動をするAPI

利点:環境に依存する情報を手動で入力したりハードコーディングしたりする必要がなくなり、設定ミスや誤記を防ぎながら、異なる環境間での移植性を高めます。

4. 定数・フォーマット系動的値

特定の定数値や、フォーマットを持つ文字列を提供します。パラメータの整形や、空値の指定などに利用します。

名称 表現例 説明 利用シーン
null null null 値 オプションパラメータのデフォルト値として
空文字列 "" 長さ0の空の文字列 空値を明示的に指定する場合
改行 \n 改行文字(LF) 複数行のテキストを整形する場合
タブ \t タブ文字 テキストの区切りや整形
空白 半角スペース文字 区切り文字として
空の JSON オブジェクト {} 空のオブジェクトリテラル デフォルトの空オブジェクト
空の JSON 配列 [] 空の配列リテラル デフォルトの空リスト

利点:JSONのフォーマットミスや、予期せぬ空値の取り扱いによるHTTPエラーを未然に防ぎ、デバッグをスムーズに進めることができます。

5. システム基本動的値の特性

  • 即時利用可能:追加の設定やインストールは一切不要です。EchoAPIを起動したその瞬間から使用できます。
  • リアルタイム生成:リクエストの度に新しい値が生成されるため、値の一意性や新鮮さが保証されます。
  • オフライン利用可能:すべての値はローカル環境で生成されるため、インターネット接続がなくても利用できます。
  • クロスプラットフォーム整合性:EchoAPIのデスクトップアプリ、VSCodeプラグイン、IntelliJ IDEAプラグインの全てで、同じ動作と結果を提供します。
  • 動的値同士の組み合わせ可能:他の動的値や後述するカスタム関数の結果と自由に組み合わせて、より複雑な値を動的に構築できます。

例:

ORDER_{{$fakerjs.Date.birthdate|format(YYYY/MM/DD HH:mm:ss,+08:00)}}{{$fakerjs.String.uuid}}
Enter fullscreen mode Exit fullscreen mode

10.png

まとめ:時間、ランダム値、環境情報、定数生成に関する豊富なシステム動的値は、APIデバッグにおけるパラメータ処理の手間と人的ミスを劇的に軽減し、効率と信頼性を大幅に向上させます。

三、カスタム関数:独自ロジックを要するデバッグ課題の解決

標準の動的値では対応が難しい、より特殊または複雑な要件がある場合、EchoAPI内で JavaScriptを使用したカスタム関数 を定義できます。パラメータの独自の暗号化、フォーマット変換、検証ロジックの追加など、業務固有のニーズに柔軟に対応することが可能です。

具体例:金融系APIにおけるパラメータの独自暗号化規則への対応

シナリオ

あるFintech(金融科技)企業の開発者が「ユーザーのクレジットカード情報連携API」のデバッグ中、以下の独自要件に直面した場合:

1. phone 番号のような機微な個人情報を、MD5方式(ただし企業独自の改変が加わった規則)でハッシュ化する必要がある。

シナリオ.png
シナリオ.png

2. さらに、暗号化されたデータの先頭に IDN_FIN_ という特定のプレフィックスを追加する必要がある。

暗号化データに  raw `IDN_FIN_` endraw  のプレフィックス追加が必要.png

カスタム関数による解決手順

1. EchoAPI のカスタム関数モジュールで独自ロジックをスクリプトとして作成

try {
  let hash = 0;
  if (text.length === 0) return hash.toString(16);
  for (let i = 0; i < text.length; i++) {
    let char = text.charCodeAt(i);
    hash = ((hash << 5) - hash) + char;
    hash = hash & hash;
  }
  return 'IDN_FIN_' + hash.toString(16); // プレフィックスを付加して返す
} catch (e) {
  return text; // エラー時は元のテキストを返す
}
Enter fullscreen mode Exit fullscreen mode
  • カスタム関数メニューをクリック カスタム関数をクリック.png
  • カスタム関数管理画面を選択 カスタム関数管理を選択.png
  • 新規関数作成ボタンをクリック 新規作成をクリック.png
  • スクリプトを入力し、テスト実行で結果を確認 スクリプト入力・テスト結果確認.png
  • APIリクエストのパラメータ設定画面で、作成した関数を参照して設定 パラメータで関数参照設定.png

2. API 呼び出し時に、phone パラメータの値として「カスタム関数 → 作成したMD5Encrypt関数」を選択。元の電話番号を引数として渡すと、EchoAPIが自動的に暗号化とプレフィックス付加を行い、その結果を送信します。

PI 呼び出し時に  raw `phone` endraw  パラメータに「カスタム関数 → MD5Encrypt」を選択し、元データを渡すと、自動で暗号化+プレフィックス付きで送信.png

主なメリット

  • 個別要件への完全対応:標準機能では実現が困難な独自の暗号化ルールやデータ加工、プレフィックス/サフィックス付加などの仕様も、自前のロジックとして組み込むことができます。
  • 環境構築負担の削減:このような処理のためにわざわざローカルにNode.js環境を構築したり、外部ツールを用意したりする必要がなく、EchoAPI上ですべて完結します。関数は作成後に再利用可能です。
  • 地域ごとの規制や要件への迅速な適応:各国・地域によってデータ処理に関する規制(データレジデンシー等)や業界ごとのルールが異なりますが、それらに応じたカスタム処理を素早く準備し、適用できます。

四、EchoAPI システム基本カスタム関数の詳細解説

EchoAPIには、あらかじめ組み込まれた一連のシステム基本カスタム関数も用意されています。ユーザー自身がコードを書くことなく、これらの関数をそのまま利用できます。これらは文字列操作、データ型変換、暗号化・復号、数学計算など、APIデバッグで最も頻繁に必要とされる汎用的な処理ロジックを網羅しています。動的値と組み合わせて使うことで、パラメータ処理の自動化と効率化をさらに推し進めることができます。

1. 文字列処理関数

このカテゴリの関数は、文字列の変換、整形、部分抽出など、多様な文字列操作を提供します。APIが要求する様々なパラメータ形式にデータを合わせる際に役立ちます。

関数名 構文 説明 使用例と結果
strToUpper strToUpper(str) 文字列を全て大文字に変換します。 strToUpper("hello")"HELLO"
strToLower strToLower(str) 文字列を全て小文字に変換します。 strToLower("HELLO")"hello"
strTrim strTrim(str) 文字列の先頭と末尾にある空白文字を除去します。 strTrim(" test ")"test"
strPadLeft strPadLeft(str, length, padStr) 文字列が指定した長さになるまで、左側を指定文字で埋めます。 strPadLeft("123", 5, "0")"00123"
strPadRight strPadRight(str, length, padStr) 文字列が指定した長さになるまで、右側を指定文字で埋めます。 strPadRight("123", 5, "0")"12300"
strReplace strReplace(str, search, replace) 文字列内の部分文字列を別の文字列に置換します。 strReplace("hello", "l", "x")"hexxo"
strSubstring strSubstring(str, start, length) 文字列から指定した位置・長さの部分文字列を抽出します。 strSubstring("hello", 1, 3)"ell"
strConcat strConcat(...strs) 複数の文字列を結合して1つの文字列にします。 strConcat("a", "b", "c")"abc"
strLength strLength(str) 文字列の長さ(文字数)を返します。 strLength("hello")5
strEncodeURI strEncodeURI(str) 文字列をURLで使用可能な形式にエンコードします。 strEncodeURI("a b")"a%20b"
strDecodeURI strDecodeURI(str) URLエンコードされた文字列をデコードします。 strDecodeURI("a%20b")"a b"

実用例:アメリカのECサイトAPIで、商品IDを大文字に統一し、かつ10桁になるよう左側をゼロ埋めする必要がある場合: strPadLeft(strToUpper(productId), 10, '0')

2. データ変換関数

数値、文字列、真偽値、JSONオブジェクトなど、異なるデータ型の間の変換や、日付のフォーマット変換を行います。

関数名 構文 説明 使用例と結果
toNumber toNumber(value) 値を数値型に変換します。 toNumber("123")123
toString toString(value) 値を文字列型に変換します。 toString(123)"123"
toBoolean toBoolean(value) 値を真偽値型に変換します。 toBoolean("true")true
parseJson parseJson(str) JSON形式の文字列をJavaScriptオブジェクトに解析します。 parseJson('{"a":1}'){a: 1}
stringifyJson stringifyJson(obj) JavaScriptオブジェクトをJSON形式の文字列に変換します。 stringifyJson({a:1})'{"a":1}'
formatDate formatDate(timestamp, format) タイムスタンプを指定されたフォーマットの日付文字列に変換します。 formatDate(1620000000000, "YYYY-MM-DD")"2021-05-03"
parseDate parseDate(dateStr, format) 指定フォーマットの日付文字列をタイムスタンプに変換します。 parseDate("2021-05-03", "YYYY-MM-DD")1620000000000
arrayJoin arrayJoin(arr, separator) 配列の全要素を指定区切り文字で結合した文字列を返します。 arrayJoin([1,2,3], ",")"1,2,3"
arraySplit arraySplit(str, separator) 区切り文字で文字列を分割し、配列を返します。 arraySplit("1,2,3", ",")[1,2,3]

地域対応formatDate 関数は、地域に応じた日付フォーマット(例:日本向け "YYYY年MM月DD日"、インドネシア向け "DD/MM/YYYY")への対応が容易です。

3. 暗号化・エンコード関数

データのセキュリティや整合性確認のために、一般的なハッシュ関数、エンコード方式を提供します。

関数名 構文 説明 使用例と結果
md5 md5(str) 文字列のMD5ハッシュ(16進数表現)を計算します。 md5("hello")"5d41402abc4b2a76b9719d911017c592"
sha1 sha1(str) 文字列のSHA-1ハッシュ(16進数表現)を計算します。 sha1("hello")"aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d"
sha256 sha256(str) 文字列のSHA-256ハッシュ(16進数表現)を計算します。 sha256("hello") → (対応する長いハッシュ値)
base64Encode base64Encode(str) 文字列をBase64形式にエンコードします。 base64Encode("hello")"aGVsbG8="
base64Decode base64Decode(str) Base64形式の文字列をデコードします。 base64Decode("aGVsbG8=")"hello"
hmacMd5 hmacMd5(str, key) 指定されたキーを用いて文字列のHMAC-MD5を計算します。 hmacMd5("hello", "key") → (対応するHMAC値)
hmacSha256 hmacSha256(str, key) 指定されたキーを用いて文字列のHMAC-SHA256を計算します。 hmacSha256("hello", "key") → (対応するHMAC値)
urlSafeBase64Encode urlSafeBase64Encode(str) URLセーフ(+-, /_)なBase64エンコードを行います。 urlSafeBase64Encode("hello...") → (URLセーフな文字列)

実用例:インドネシアの金融APIで、リクエストパラメータと秘密鍵を利用してHMAC-SHA256による署名を生成し、通信の安全性と改ざん検知を実現する。

4. 数学・論理関数

算術演算、乱数生成、条件分岐、値の比較などを行います。動的なパラメータ値の計算に使用します。

関数名 構文 説明 使用例と結果
mathAdd mathAdd(a, b) 2つの数値を加算します。 mathAdd(2, 3)5
mathSubtract mathSubtract(a, b) 最初の数値から2番目の数値を減算します。 mathSubtract(5, 2)3
mathMultiply mathMultiply(a, b) 2つの数値を乗算します。 mathMultiply(2, 3)6
mathDivide mathDivide(a, b) 最初の数値を2番目の数値で除算します。 mathDivide(6, 2)3
mathRound mathRound(num, precision) 数値を指定された精度(小数点以下の桁数)で四捨五入します。 mathRound(3.1415, 2)3.14
mathRandom mathRandom(min, max) 指定された範囲内のランダムな整数を生成します。 mathRandom(1, 10)5 (例)
ifElse ifElse(condition, trueVal, falseVal) 条件式の評価結果に応じて、2つの値のいずれかを返します。 ifElse(1>2, "yes", "no")"no"
isEmpty isEmpty(value) 値が空(空文字、null、未定義など)かどうかを判定します。 isEmpty("")true
isEqual isEqual(a, b) 2つの値が厳密に等しいかどうかを判定します(型も比較)。 isEqual(2, "2")false

実用例:アメリカのECサイトで、商品価格と税率から注文の税額を計算し、小数点以下2桁に丸める: mathRound(mathMultiply(price, taxRate), 2)

5. システムユーティリティ関数

環境変数の操作、処理の待機、ログ出力、一意なIDの生成など、システム utility 的な機能を提供します。

関数名 構文 説明 使用例
getEnv getEnv(name) 指定された名前の環境変数の値を取得します。 getEnv("apiUrl")"https://api.example.com"
setEnv setEnv(name, value) 指定された名前と値で環境変数を設定(または更新)します。 setEnv("token", "abc123")
sleep sleep(ms) 指定されたミリ秒間、処理の実行を暫時停止します。 sleep(1000) → (1秒待機)
log log(message) デバッグコンソールにメッセージを出力します。 log("リクエスト開始")
uuid uuid() ランダムなUUID(バージョン4)を生成します。 uuid()"f47ac10b-..."
timestamp timestamp(ms?) 現在のタイムスタンプを取得します(オプションでミリ秒指定)。 timestamp()1620000000000

実用例:APIリクエストを送る前に環境変数からベースURLを取得したり、連続したAPI呼び出しの間に少し間隔を置いたり、デバッグ中に変数の値をログ出力して確認する。

6. システム基本カスタム関数の特徴

  1. 設定不要ですぐ使える:すべてのシステム関数は初めから組み込まれており、インポートや設定なしで即時利用できます。
  2. クロスプラットフォーム互換性:EchoAPIのデスクトップアプリ、VSCodeプラグイン、IntelliJ IDEAプラグインのすべての環境で、同一の関数が同じように動作します。
  3. 関数の組み合わせと入れ子呼び出し:複数の関数を組み合わせたり、他の関数の戻り値を別の関数の引数として渡すことで、より複雑なロジックを簡潔に表現できます。

    // 例:タイムスタンプ付きの署名文字列を生成
    try {
        const timestamp = new Date().getTime();
        const signature = `${text}-${timestamp}`;
        return signature;
    } catch (error) {
        return text;
    }
    

    システム基本カスタム関数の特徴.png
    システム基本カスタム関数の特徴.png

  4. オフライン動作:すべての関数処理はローカルマシン上で実行されるため、インターネット接続がなくても利用可能です。

  5. 地域化への配慮:日付のフォーマットなど、一部の関数は地域ごとの習慣や規制に合わせた使い方が容易です。

システム基本カスタム関数は、APIデバッグで必要となるパラメータ処理の大部分(80%以上)をカバーしており、動的値と組み合わせることで、ユーザーが独自のスクリプトを書く手間を大幅に削減します。迅速なデバッグと、標準化されながらも柔軟な処理フローの実現に最適です。

まとめ:動的値とカスタム関数の核心的価値

機能 解決する主要課題 多地域に展開する開発者への付加価値
動的値 パラメータ値の動的変化への対応、API間のパラメータ依存関係の管理 タイムゾーンや日付フォーマットの差異を自動的に吸収・適応
カスタム関数 標準機能では対応できない独自の業務ロジック(暗号化、データ変換、検証など)の実装 各地域の固有の業務ルール、規制要件、データ形式に迅速かつ柔軟に対応

これら二つの強力な機能を組み合わせて利用することで、APIデバッグにおける手動操作や、それに伴う人的ミスを大幅に削減できます。開発者は煩雑なパラメータ管理から解放され、本来の目的である「業務ロジックそのものの検証と品質向上」に集中できるようになります。特にアメリカ、日本、インドネシアなど、複数の地域にサービスを展開し、それぞれで異なる要件を持つ場合のデバッグ作業を、統一された方法で効率的に進めることが可能です。

Top comments (0)