# SDKリファレンス - streams

このセクションでは、ファイルストリーム生成アクションを作成するために使用できるストリーミングコールバックを定義するためのすべての可能なキーを列挙します。ファイルストリーミングについて詳しく学ぶ。

クイック概要

streamsキーは、アクションまたはトリガーと組み合わせて使用する必要があります。これにより、Workato Files、Google Cloud Storage、S3などのファイルストレージプロバイダーに接続できるアクションを構築することができます。大量のデータ(CSVファイルやビデオなど)をチャンク単位でダウンロードすることができます。

# 構造

    streams: {

      [Unique_stream_name]: lambda do |input, starting_byte_range, ending_byte_range, byte_size|
        Array
      end, 

      [Another_unique_stream_name]: lambda do |input, starting_byte_range, ending_byte_range, byte_size|
        Array
      end, 
    },

属性 説明
キー [Unique_stream_name]
タイプ ラムダ関数
説明 このラムダ関数は、workato.stream.outコールバックを使用して、ストリーミングアクションから呼び出すことができます。
可能な引数 input - workato.stream.outで定義されたユーザーが入力した値を表すハッシュ
starting_byte_range - この特定のチャンクのリクエストされた開始バイト範囲を表す整数
ending_byte_range- この特定のチャンクのリクエストされた終了バイト範囲を表す整数
byte_size- この特定のチャンクの正確なバイト数を表す整数
期待される出力 サイズが2の配列。最初のインデックスは、この特定のチャンクの実際のバイトを表します。2番目のインデックスは、このファイルが最後のチャンクであるかどうかをWorkatoフレームワークに伝えるブール値です。
ファイルストリームの作成

Workato上のファイルストリームは、一般的なHTTP RFC標準のRangeヘッダー (opens new window)を活用して作成されます。以下に、ファイルストリーミングを使用したシンプルなダウンロードファイルアクションの例を示します。

actions: {
  download_file: {
    title: "ファイルをダウンロード",

    input_fields: lambda do 
      [
        {
          name: "file_id",
          label: "ファイルID"
        }
      ]
    end,

    execute: lambda do
      {
        file_contents: workato.stream.out("download_file", { file_id: file_id })
      }
    end,

    output_fields: lambda do 
      [
        {
          name: "file_contents"
        } 
      ]
    end
  }
}

workato.stream.outメソッドで定義されたdownload_fileストリームは、プラットフォームによって要求されたバイト範囲を取得するコードを保持する役割を担っています。これは、ストリームコンシューマーに送信され、ダウンストリームの宛先にアップロードされます。

したがって、このコールバックに渡される引数は、HTTPリクエストでこのバイト範囲を取得するために使用できる明確な入力を提供します。

ストリームラムダの出力は、バイト文字列を最初のインデックスに、ファイルの終わりである場合は真であるブール値を2番目のインデックスに期待しています。

streams: {
    download_file: lambda do |input, starting_byte_range, ending_byte_range, byte_size|
      # 例: starting_byte_range = 0
      # 例: ending_byte_range = 10485759 
      # 例: byte_size = 10485760 (10MB)
      # アクションから渡されるinputはフレンドリーなURLであると仮定できます
      chunk = get("/#{input['file_id']}/download").
        headers("Range": "bytes=#{starting_byte_range}-#{ending_byte_range}").
        response_format_raw
      # もしchunk.sizeが要求されたbyte_sizeよりも小さい場合、
      # ファイルの終わりに到達したことを知ることができます。
      [chunk, chunk.size < byte_size]
    end
}

download_fileラムダは、file_contentsのデータピルがダウンストリームアクションにマッピングされたときにのみ実行されることに注意してください。


Last updated: 2024/2/13 16:59:53