APIScript のアイテム

Version 25.3.9411


APIScript のアイテム


フィードは、アイテム で構成されますが、APIScript ではアイテムはフィードの部品という以上の働きをします。アイテムは、オペレーションにインプットを提供するために使われることもあります。

アイテムの宣言

APIScript では、アイテムは、api:set キーワードを通じて作成され、名付けられ、属性値を与えられます:

<api:set item="input" attr="mask" value="*.txt" />

上の例は、input という名前のアイテムのmask アトリビュートに*.txt という値を設定します。この場合、input アイテムはAPIScript の変数の働きをします。

ただし、input という名前のアイテムは宣言されていません。その代わり、初回にアトリビュートをセットしようとすると、そのアイテムが生成されます。前の例では、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]” がitem1attr1 アトリビュートとして評価されるからです。

Note:バックスラッシュを使って、文字列リテラルの角括弧をエスケープできます。

デフォルトアイテム

APIScript には、アイテムの内部スタックに暗黙的な無名のアイテム(デフォルトアイテム )が常にあります。次の2つのケースでは、デフォルトアイテムは共通してスクリプトを短く、書きやすくするために使われています:

  • オペレーションの呼び出し:デフォルトアイテムは、他のアイテムが指定されていない場合に、デフォルトでスクリプトオペレーションに渡されるアイテムです。これは、api:set を使ってデフォルトの無名アイテムにアトリビュートを記述でき、それらのアトリビュートは次に呼び出されるスクリプトオペレーションのインプットとして渡されることを意味します。これは、オペレーションに必要なパラメータを提供する一つの方法です。
  • オペレーションまたはスクリプトのアウトプット内の現在のアイテムを処理:オペレーションの結果の変数名を指定しなかった場合、オペレーションを起動するapi:call ブロックの内部でデフォルトアイテムはオペレーションで生成された現在のアイテムを参照します。

APIScript キーワードのアイテムアトリビュートを省略することでデフォルトアイテムを操作します:

<api:set attr="path" value="." />

特殊なアイテム

スクリプトで宣言されたアイテムに加えて、スクリプトのスコープではいくつかのビルトインアイテムが利用可能です。APIScript で利用可能なビルトインアイテム、または特殊なアイテムは、HTTP リクエストやレスポンスなどの一部にアクセスするためのインターフェースを提供します。これらの特殊なアイテムは、HTTP リクエストのインプットを処理のインプットにマッピングするために役立ちます。

以下のセクションで、特殊なアイテムについて説明します。

スクリプトインプット (_input)

スクリプトのインプットは_input アイテムから読み取ることができます。_input アイテムには、スクリプトが実行された際にURL のクエリ文字列やPOST データで検出された変数が含まれます。POST データに同じ名前の変数が存在する場合には、クエリ文字列の値をオーバーライドします。

スクリプトのデフォルトアイテムから値を読み取るときは、_input から値を読み取ることになります。同様に、デフォルトアイテムに書き込むアトリビュートは、スクリプトのインプットとともにオペレーションのパラメータとして渡されます。情報ブロックまたはスクリプトに定義された変数のみが、_input アイテムで利用可能です。

Note:api:call ブロック内では、_input はデフォルトアイテムではないため、アクセスが必要な場合は名前で参照する必要があります。

スクリプトアウトプット (_out[n])

api:call キーワードにより生成されたフィード内の現在のアイテムは、デフォルトアイテムまたは名前付きの特殊アイテム_out[n] を通じてアクセスできます。napi: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:* ユーザーの認証情報にアクセス。ユーザーが[_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 セッション変数は、APIScript では、_session アイテム経由で利用可能です。セッション内に保存された任意のオブジェクトに、このアイテムのアトリビュートとしてアクセスできます。アトリビュート名は、セッションにオブジェクトを保存するためのキーを表します。