クエリスライサー
クエリスライサーのロジックは、connector がIN 句を使用して、各フィルタ値に対して別々のリクエストをプッシュダウンすることを可能にします。
これにより、connector はクライアントサイドのフィルタリングを回避できます。
クエリスライサーロジックの設定
クエリスライサーのロジックを実装するRSD を開きます。
以下のapiscript 例を参照してください。
<api:info title="launches" desc="List launches." other:queryslicercolumn="flight_id" xmlns:other="http://apiscript.com/ns?v1">
<attr name="flight_id" xs:type="integer" readonly="false" other:xPath="/json/flight_id" other:filter="{flight_id}" />
<attr name="id" xs:type="integer" readonly="false" other:xPath="/json/id" />
<api:check attr="_input.flight_id">
<api:set attr="URI" value="http://example.com?flight_number={flight_id}"/>
</api:check>
この設定では、次のクエリはフィルタ値ごとに別々のリクエストを動的に渡すようになります。
SELECT * FROM launches WHERE flight_id IN ('1', '2', '3')
さらに、フィルタのサブSELECT クエリを使用して、フィルタの動的リストを渡すことができます。
SELECT * FROM launches WHERE flight_id IN (SELECT id FROM flights)
この機能を使用するには、子テーブル(この場合は「launches」)の RSD にのみother:queryslicercolumn="flight_id" を設定する必要があります。
制限事項と考慮事項
スクリプトでは、スライスされたインプットにアクセスする場所のほとんどは、単一の要素を返しません。例えば、ID フィールドのスライスされた値にアクセスしようとして、GET ブロックの中で次のようなことを行うとします。
<api:set attr="URI" value="http://example.com/[_input.id]" />
これは機能せず、単一のID ではなく完全なSQL リスト(例:http://example.com/(1, 2, 3))を含むURL を返します。
スクリプト内でスライスされたID を使用できるのはURI だけで、それはスライスされたインプットが実際に使用可能になる後の段階で中括弧のビットが展開されるためです。
<api:set attr="URI" value="http://example.com/{id}" />