API Script のアイテム
Version 23.0.8844
API Script のアイテム
Version 23.0.8844
フィードは、アイテムにより成り立ちますが、API Script ではアイテムはフィードの部品という以上の働きをします。アイテムは、オペレーションにインプットを提供するために使われることもあります。
アイテムの宣言
API Script では、アイテムは、api:set キーワードを通じて作成され、名付けられ、アトリビュート値を与えられます。
<api:set item="input" attr="mask" value="*.txt" />
このラインは、”input” という名前のアイテムの、”mask” アトリビュートに”*.txt” という値をセットします。この場合、インプットアイテムはAPI Script の変数の働きをします。 ただし、”input” という名前のアイテムは宣言されていません。その代わりに、初回にアトリビュートをセットしようとすると、そのアイテムが生成されます。上の例では、インプットアイテムが存在していない場合、そのアイテムが生成され、mask アトリビュートがセットされます。
アトリビュート値の選択
アトリビュートを参照するには、構文item.attribute(例:”input.mask”)を使用します。あるアトリビュート値をクエリするには、括弧 ([]) でアトリビュート名を囲います。これは、文字列リテラルとしてではなく、文字列を評価したいということを示します。
例えば、次のコードスニペットを見てください:
<api:set item="item1" attr="attr1" value="value1"/>
<api:set item="item1" attr="attr2" value="item1.attr1"/>
<api:set item="item1" attr="attr3" value="[item1.attr1]"/>
結果は次のとおりです:
- item1.attr1 は、”value1” のリテラル文字列の値を割り振られます。
- item1.attr2 は、”item1.attr1” のリテラル文字列の値を割り振られます。
- item1.attr3 は、”value1” の値を割り振られます。これは、文字列”[item1.attr1]” がitem1 のattr1 アトリビュートとして評価されるからです。
文字列リテラルにおいて、\ を使って、括弧からエスケープすることができます。
デフォルトアイテム
API Script では、デフォルトアイテムという、アイテムの層の中に黙示的で名付けられていないアイテムがあります。次の2つのケースでは、デフォルトアイテムは共通してスクリプトをより短く、簡単に書くために使われています。
- オペレーションの呼び出し:デフォルトアイテムは、他に指定されたアイテムがない場合に、デフォルトで呼び出されたオペレーションに渡されるアイテムです。これはつまり、api:set を使って、デフォルトの名付けられていないアイテムのアトリビュートを書いて、そのアトリビュートがスクリプト内の次のオペレーションのインプットとして渡されることを意味します。これは、オペレーションに必要なパラメータを提供する一つの方法です。
- オペレーションまたはスクリプトのアウトプット内の現在のアイテムを処理:オペレーションの結果の変数名を指定しなかった場合、オペレーションを起動するapi:call ブロックの内部でデフォルトアイテムはオペレーションで生成された現在のアイテムを参照します。
API Script のキーワードのアイテムアトリビュートを単に省略することでデフォルトアイテムを操作する:
<api:set attr="path" value="." />
特別なアイテム
スクリプト内で宣言されたアイテムに加えて、スクリプトのスコープでは、いくつかのビルトインアイテムが利用可能です。API Script では、ビルトイン、もしくは特殊なアイテムが利用可能で、HTTP リクエスト、レスポンスの部分にアクセスするインターフェースを提供します。特殊なアイテムはHTTP リクエストのインプットを処理のインプットにマッピングするために役立ちます。
以下のセクションで、特殊なアイテムについて説明します。
スクリプトインプット (_input)
スクリプトへのインプットは _input アイテムから参照されます。_input アイテムは、スクリプトが実行される際のURL クエリ文字列およびPOST データの中に見出せる変数を含みます。もし、POST データに同じ名前の変数が存在する場合には、クエリ文字列の値を上書きします。
スクリプト内のデフォルトアイテムから値を読む場合、_input から値を読んでいます。同様に、デフォルトアイテムに書き込みたいアトリビュートは、インプットスクリプトとともにオペレーションのパラメータとして渡されます。情報ブロック、もしくはスクリプト内に定義された変数だけが_input アイテム内では有効です。
api:call ブロックの内部では、_input はデフォルトアイテムではなく、アクセスするためには名前を参照しなければなりません。
スクリプトアウトプット (_out[n])
api:call キーワードにより生成されたフィード内の現在のアイテムは、デフォルトアイテムもしくは名前を指定された特殊アイテム”_outX” を通じてアクセスすることができます。X はapi:call キーワードのネスティングのレベルです。例えば、単一のapi:call キーワードの内部の場合、アイテム名は”_out1” です。api:call キーワードの3つのネストレベルの内部の場合、_out3 となります。
HTTP リクエスト (_request)
URL クエリ文字列に渡された変数、POST されたスクリプト、および_request アイテム内のアトリビュートのコレクションの変数にアクセスできます。アトリビュートの指定されたコレクションにアクセスするには、読みたいアトリビュートの接頭辞としてコレクションを使います。例えば、[_request.qstring:name] はクエリ文字列内の”name” 変数の値を読み、[_request.form:name] はフォームデータの”name” 変数の値を読みます。
- [query]string:* クエリ文字列パラメータにアクセス。
- form:* フォームデータ内の変数の値にアクセス。
- server:* サーバー変数の値にアクセス。
- body:* リクエストのraw コンテンツ(ボディ)にアクセス。
- auth:* ユーザーのauthtoken 情報にアクセス。ユーザーが[_request.auth:isauthenticated] にアクセス認証されているかを確かめます。
- other:* リクエストに関する他の情報にアクセス。[_request.other:applicationpath] でアプリケーションパスを取得します。
HTTP レスポンス (_response)
レスポンスアイテムは、スクリプトの書き手がHTTP レスポンスに対して直接書き込むことを許容します。レスポンスアイテム内に、以下のリストのアトリビュートをセットすることができます。
- cookie:* レスポンスにcookie をセットする。アトリビュート名は、”cookie” を接頭するcookie 名で、cookie の値がアトリビュートの名前となります。
- writefile レスポンスに指定されたパスの内容を書く。
- redirect クライアントのブラウザにリダイレクトヘッダーを送る。これはブラウザを別のURL にリダイレクトするために使われます。
- statuscode レスポンスのHTTP ステータスコードをセットする。
- statusdescription レスポンスのHTTP ステータス説明をセットする。
HTTP ヘッダー (_httpheaders)
_httpheaders アイテムは、スクリプトおよびテンプレート内でHTTP ヘッダーに簡単にアクセスすることを可能にします。アイテムを読むことで、HTTP リクエストヘッダーを読むことができます。アイテムに書き込むことで、outgoing レスポンスヘッダーに対して書き込むことができます。必要な情報は、以下のようにしてライン付きのコンテンツタイプをセットすることができます。
<api:set item="_httpheaders" attr="content-type" value="application/xml"/>
HTTP クッキー (_cookies)
_cookies アイテムを使って、リクエスト内でcookie を取得したり、レスポンス内でcookie をセットすることができます。複数のkey/value ペアのcookie はcookie のkey/value ペアに対応するアトリビュートのコレクションとして表されます。cookie 名は、それぞれのコレクションのアトリビュートで接頭されます。
ASP.NET セッション (_session)
ASP.NET セッション変数は、API Script では、_session アイテム経由で利用可能です。セッション内に保存されたオブジェクトは、このアイテムのアトリビュートとしてアクセスできます。アトリビュート名は、セッション内でオブジェクトを保存する際のキーとなります。