Web File API(β版)

❗️

注意事項

本機能は現在β版提供のため、今後仕様が変更される場合があります。

任意の外部APIと双方向のファイル連携が可能です。

データ連携のパターン

  • 以下の連携が可能です
    • 外部APIからDatahubにファイルを直接インポートする
    • Datahubから外部APIにファイルを直接エクスポートする

Datahubジョブ設定

「接続先」

  • ヘッダー
    • リクエストヘッダーを指定します
    • key , value の組み合わせで複数設定できます
      • 例: X-API-TOKEN, xxxxxxxxxx と設定した場合、リクエストヘッダーに {X-API-TOKEN: "xxxxxxxxxx"} が設定されます

インポート

  • エンドポイント
    • http or https のプロトコルをサポートしています
  • フォーマット
    • CSV or JSON(改行区切り)をサポートしています
  • データフィールド
    • クエリ文字列を設定します
    • key , value の組み合わせで複数設定できます
      • 例: key1, value1 と設定した場合、エンドポイントの末尾に ?key1=value1 が追加されます

エクスポート

  • エンドポイント
    • http or https のプロトコルをサポートしています
  • ファイル名
    • 出力先のファイル名を指定します
    • 指定しない場合、任意のファイル名が設定されます
  • データフィールド
    • リクエストボディを key , value の組み合わせで設定します
    • 抽出するファイルの中身はストリーミング形式でリクエストボディに乗っているので、それ以外の項目を設定してください

リクエストヘッダーについて

  • リクエストヘッダーにはデフォルトでX-KarteSignatureが付与されます
    • X-KarteSigunatureはシークレットキー、ランダムに生成された値(karte_nonce)、タイムスタンプを元に生成され、リクエストの送信元がKARTEであることを確認するために使うことができます。
    • Karteからのリクエストは下記のヘッダーを含みます。
フィールド名説明サンプル値
X-KarteSigunature署名検証に使うための署名unTcht0qFrIv/9jg
karte_nonceランダムに生成された値2020-02-13T08:28:22:694Z
timestampリクエストが送信された時間LqRM04LilUPZw9cSKANlU273picAcezrp1WpuLcmA=
  • リクエストの署名検証
    • リクエストの署名を検証することで、リクエストの送信元がKarteであることを確認できます。
    • 以下の手順で署名を検証することができます。
      1. Web File APIの「接続先の詳細」画面からシークレットキーを取得する
      2. リクエストヘッダーからX-KarteSigunature,karte_nonce,timestampを取得する
      3. シークレットキーとkarte_nonce,timestampを使って、HMAC-SHA256アルゴリズムでダイジェスト値を取得する
      4. ダイジェスト値とX-KarteSigunatureの値が一致するか確認する
      5. タイムスタンプと現在時刻にずれがないかを確認する
    • リクエストの送信元がKARTEであることを確認するサンプルコードを記載します。
const crypto = require('crypto');
const SECRET_KEY = 'LqRM04LilUPZw9cSKANlU273picAcezrp1WpuLcmA='

app.post('/', function(req, res) {
  const karteSignature = req.get('X-KarteSignature');
  const timestamp = req.get('Time-Stamp');
  const karte_nonce = req.get('karte_nonce');
  
  const calculatedHMAC = crypto
    .createHmac('sha256', SECRET_KEY)
    .update(karte_nonce)
    .update(timestamp)
    .digest('base64');

  if (karteSignature !== calculatedHMAC) {
    throw new Error('Invalid hamc signature');
  } // HMAC署名の確認
  
  const timestampFromKarte = Date.parse(timestamp);
  if (new Date() - timestampFromKarte > 60 * 5 * 1000) {
    throw new Error('The request timestamp is more than five minutes from local time');
  } // Timestampの確認

  // do something
});

※2020/02/21 以前に作成された外部API接続の設定では、HMAC認証を利用できません。HMAC認証を利用する場合は新しく外部API接続の設定を作成してください。