TiDB Data Service を触ってみる その1
前回の記事でChat2Query から 2種類のData Service EndPointが作成されています。
Data Service とは
カスタム API エンドポイントを使用して
HTTPS リクエスト経由でTiDB Cloudデータにアクセスでき、
HTTPS と互換性のあるアプリケーションやサービスとシームレスに統合できます。
とのことです。
つまりHTTPベースでデータにアクセスが可能でSQLの実行結果をJSON形式で入手することが可能になるため、WEBサービスなどへの組み込みが容易になる機能です。フロントエンドから直接任意のSQLが発行できるという意味ではSQLインジェクション等が懸念されるかもしれないですが、Data Service ではあらかじめクラスター側にプリセットされたSQL毎にEnd Point が作成されそれを呼び出すという形態ととるため、特定のSQLしか実行されないようになっており安心です。
さっそくやってみる
前回までの手順で2種類のEndPointがすでに作成されています。
New App Service
がChat2Query経由で生成されたもの、New App
が外部SQLファイル経由で作成されたものです。
この記事では外部SQLファイル経由で作成されたものを外部HTTPエンドポイント経由で実行してみます。
まずSQLエディタでSQLを以下のように書き換えておきます。Chat2Queryの画面で実行したSQLとData Service で実行するSQLは作成時点は同じものがコピーされていますが、別々のものとして存在しており書き換えることが可能です。この点は作業手順的に少しややこしいですが、Data Service はあくまで任意のSQLをHTTPエンドポイント経由で実行する機能であり、Chat2Queryで作成したビューないしはマテリアライズドにアクセスする物ではないということです。
SQLが実行出来たらEnd Pointの作成と実行に必要な認証識別子の作成に入ります。まずはアプリケーションをクリックします。
Settings
タブをクリックし画面下部のAuthentication
からCreate API Key
をクリックします。
デフォルトのままRead Only
でNext
をクリックします。
Copy All
をクリックしてPublicとPrivate Keyをcopyしてメモ帳か何かに貼り付けておきます。
次にGET Getting Started
をクリックし右側のProperties
タブをクリックします。
実行されるSQLに任意のエンドポイント名を指定する必要がありますのでselectall
と指定します。
この際必ず/
から始まる必要があります。
次にShow Code Example
をクリックします。テスト環境と本番環境の選択が出てきますが、現時点ではこのエンドポイントは本番環境にデプロイされていないため、テスト環境を指定しコードをcopyします。
curl --digest --user ${PUBLIC_KEY}:${PRIVATE_KEY} --request GET 'https://ap-northeast-1.data.tidbcloud.com/api/v1beta/app/dataapp-doIwDKPm/endpoint/selectall'\
--header 'endpoint-type: draft'
鍵を置き換えます。${
}
の部分は不要です。以下のようなJSONが出力されます。
{
"type":"sql_endpoint",
"data":{
"columns":[
{
"col":"id",
"data_type":"INT",
"nullable":false
},
{
"col":"name",
"data_type":"VARCHAR",
"nullable":false
}
],
"rows":[
{
"id":"1",
"name":"koiping"
},
{
"id":"2",
"name":"kameping"
}
],
"result":{
"code":200,
"message":"Query OK!",
"start_ms":1713763621868,
"end_ms":1713763622459,
"latency":"591.289824ms",
"row_count":2,
"row_affect":0,
"limit":1000
}
}
}
実行が確認出来たら画面右上からDeploy
ボタンを押します。
先ほどのCurlコマンドから
--header 'endpoint-type: draft'
部分を削除して再度実行してください。
同様に実行結果がJSONで戻ります。
Chat2Query API 経由で生成されたData Service 用エンドポイントはまた少し画面構成などが異なっており、次回の記事で解説したいと思います!
Discussion