このモードでは、複数のHTTPリクエストでデータをより小さなチャンクで取得できます。最初のリクエストでは、CData Virtuality は最初の行のバッチのみをフェッチするのではなく、結果セット全体をフェッチし、キャッシュに保存します。HTTPクライアントから次のバッチが要求されると、実際のクエリの結果セットを再計算する代わりに、キャッシュからデータが提供されます。後続のバッチを識別するために、REST API は追加の HTTP ヘッダーrequestid
と、前後のページへのポインタを返します。
最初のリクエストでは、pagination=TRUE
パラメータを指定した場合のみ、Pagination モードを有効にできることに注意してください。それ以降のリクエストでは、requestId
パラメータに特定のカーソル識別子を与えるだけで十分です。
Example 1
POST
http://
<
cdatavirtuality
-server-address>:8080/rest/api/query?pagination=true&limit=3&offset=3
ボディ (application/json):
{ "sql": "SELECT * FROM SYS.Tables" }
STATUS 200
[
["datavirtuality","SYS","Keys","Table",null,true,false,"tid:2cb59cfd55db-0023a214-00000040",-1,null,true,false,4],
["datavirtuality","SYS","ProcedureParams","Table",null,true,false,"tid:2cb59cfd55db-ab347619-0000004c",-1,null,true,false,5],
["datavirtuality","SYS","Procedures","Table",null,true,false,"tid:2cb59cfd55db-8f29b420-0000005d",-1,null,true,false,6]
]
レスポンスのヘッダー:
limit = 3
offset = 3
nextPage = http://localhost:8080/rest/api/query?requestId=767913&limit=3&offset=6
prevPage = http://localhost:8080/rest/api/query?requestId=767913&limit=3&offset=0
requestId = 767913
Example 2
POST
http://
<
cdatavirtuality
-server-address>:8080/rest/api/query?requestId=767913&limit=3&offset=6
ボディ (application/json):
{ "sql": "SELECT * FROM SYS.Tables" }
STATUS 200
[
["datavirtuality","SYS","Properties","Table",null,true,false,"tid:2cb59cfd55db-3f9f6953-00000066",-1,null,true,false,7],
["datavirtuality","SYS","ReferenceKeyColumns","Table",null,true,false,"tid:2cb59cfd55db-aa92fa09-0000006c",-1,null,true,false,8],
["datavirtuality","SYS","Schemas","Table",null,true,false,"tid:2cb59cfd55db-d57e16d2-0000007b",-1,null,true,false,9]
]
レスポンスのヘッダー:
limit = 3
offset = 6
nextPage = http://localhost:8080/rest/api/query?requestId=767913&limit=3&offset=9
prevPage = http://localhost:8080/rest/api/query?requestId=767913&limit=3&offset=3
requestId = 767913
Example 3
ソースエンドポイントによるページネーション:
GET
http://
<
cdatavirtuality
-server-address>:8080/rest/api/source?pagination=true&limit=2&offset=0
ボディ (application/json):
STATUS 200
[{"Name":"INFORMATION_SCHEMA"},{"Name":"SYS"}]
レスポンスのヘッダー:
limit = 2
offset = 0
nextPage = http://localhost:8080/rest/api/source?requestId=667476&limit=2&offset=2&array=false&headers=false
prevPage = http://localhost:8080/rest/api/source?requestId=667476&limit=2&array=false&headers=false
requestId = 667476
Pagination support for source endpoints (data source-based requests) is available since v4.10
Example 4
不正なクエリの場合、この最後の例で示されるように、ステータス400と説明メッセージが返されます:
POST
http://
<
cdatavirtuality
-server-address>:8080/rest/api/query?pagination=true
ボディ (application/json):
{ "sql": "NOT SQL" }
STATUS 400
{
"title": "Something is wrong",
"description": "Error while parsing query: Encountered \"NOT\" at line 1, column 1.\rWas expecting one of:\r \"begin\" ...\r \"{\" ...\r \"create\" ...\r \"alter\" ...\r \"with\" ...\r \"select\" ...\r \"values\" ...\r \"table\" ...\r \"(\" ...",
"hint": null
}