TiDB Serverless の Data Service を Postman から操作する :その2 POST/INSERT
今日はPOST/INSERTを行います。
さっそくやってみる
1. 検証用デーブル作成
TiDB Cloudのマネージメントコンソールで以下のSQLを実行します。
use test;
CREATE TABLE postman (
column1 varchar(255),
column2 varchar(255)
);
2. Data Service でEndPoint を作成
Data Service
から+
をクリックしてCreate Endpoint
を選択します。
以下のSQLをペーストしてRun
ボタンをクリックします。
USE test;
INSERT INTO postman (column1,column2)
VALUES ("test", "kameman");
Properties
タブでメソッドをPOSTに変更します。
Path
に/datainsert
と名前を付けます。
画面右上Test
ボタンをクリックしてステータスコード200が戻っていることを確認します。
Deploy
ボタンをクリックします。
Show Code Example
をクリックしBasic Authentication
を選択し表示されるcurlコマンドをコピーして一度テストしておきます。${PUBLIC_KEY}
と${PRIVATE_KEY}
は前回の記事と同様にAPI KEYの値に置き換えます。
(curl環境が無い方はこの手順を飛ばしても問題ありません)
3. Postmanへのインポート
APIが出来ましたのでAppを選択し後画面右上のRun in Postman
をクリックします。
Run in Postman for Web
をクリックした後、Copy Data App URL
をクリックします。
Postman側の画面でインポート
をクリックします。
コピーしたいURLをペーストすると前回の環境を上書きするか聞いてきますので、置き換える
を選びます。以下のように新しくPOST
が作成されています。環境変数としてセットされていた${PUBLIC_KEY}
と${PRIVATE_KEY}
がきえるはずなので再度入力し保存
をクリックします。
POSTのAPIコールを実行して200が戻ってくれば成功です。
4. 外部パラメータによる書き込む値の取得
Data Service は外部からSQLを実行できる機能ではなく、あらかじめ設定済のSQLがAPIとして提供される、と前回の記事で整理しました。一方でこのSQLの中に変数を設定しておくことでリクエストボディからその値を流し込むことが可能です。
まずTiDB側でSQLを以下のように変更します。
USE test;
INSERT INTO postman (column1,column2)
VALUES (${column1},${column2});
そうすると画面右のパラメータタブが変数を2つ認識します。${column1}
と${column2}
です。
Test Values
のAuto-Fill dummy test data
をクリックします。
(余談ですがオーバーレイで2つのアイコンが重なって見づらいので消す方法をご存じの方を教えてください)
Test
で200が戻ってきたらDeploy
をクリックし、先ほどと同じ手順で再度Postmanに上書きインポートを行います。Postman側で変数が上書きされて消えるので再度投入します。保存
をクリックしてPOSTのAPIコールを見るとボディ
タブに2つの変数がセットされていることがわかります。
テーブルの中身が以下となっており変数名がそのまま文字列として扱われています。
これはTiDB Serverless Data Service と Postmanの変数の記載方法の違いによるものです。
Postman側で設定されているボディを以下に変更します。
{
"column1": "${column1}",
"column2": "${column2}"
}
{
"column1": "{{column1}}",
"column2": "{{column2}}"
}
次に変数を2つ以下のように追加します。
保存
を押して再度POSTのAPIコールを実行すると値が入力されます。
curlの場合は普通にJSONボディで値を引き渡せば同様の結果となります。
Discussion