前回はルーティングを設定し、json 形式のレスポンスを返すところまでやったので、今回は MySQL と連携してユーザ一覧情報を返すようにしたいと思います
MySQL でテストデータ作成
MySQL に直接接続して、テスト用のデータベース・テーブル・データを作成します
CREATE DATABASE test_db; use test_db; CREATE TABLE `users` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO users (name) VALUES ("foo"), ("bar"), ("baz");
テストデータを確認してみます
SELECT * FROM users\G *************************** 1. row *************************** id: 1 name: foo *************************** 2. row *************************** id: 2 name: bar *************************** 3. row *************************** id: 3 name: baz 3 rows in set (0.00 sec)
これでテストデータの作成は完了です
ユーザ情報取得
テストデータの作成が完了したので、ID からユーザ情報を取得できるようにしていきます
まずは MySQL に接続する初期設定を書いてみます
import jester, asyncdispatch, json, db_mysql # ① let db = open("localhost", "user", "password", "test_db") # ②
import
にdb_mysql
を追加します- ここで MySQL に接続する設定情報を記述します
次に ID からユーザ情報を取得して json としてレスポンスを返すようにします
get "/users/@id": var row = db.getRow(sql"select * from users where id = ?", @"id") # ③ var data = %*{"id": row[0], "name": row[1]} # ④ resp $data, "application/json"
これで ID から単一ユーザ情報を取得できるようになったので、実行して確認しています
取得できました!
ユーザ一覧情報取得
/users
という URL でユーザの一覧情報も取得できるようにしたいと思います
get "/users": var rows = db.getAllRows(sql"select * from users") var users: seq[JsonNode] # ⑤ users = @[] # ⑥ for row in rows: users.add(%*{"id": row[0], "name": row[1]}) # ⑦ var data = %*{"total": users.len, "users": users} resp $data, "application/json"
これで実行するとユーザの一覧情報が取得できます
ここまでのコードはこんな感じです
import jester, asyncdispatch, json, db_mysql let db = open("localhost", "user", "password", "test_db") routes: get "/": resp "Hello World!" get "/users": var rows = db.getAllRows(sql"select * from users") var users: seq[JsonNode] users = @[] for row in rows: users.add(%*{"id": row[0], "name": row[1]}) var data = %*{"total": users.len, "users": users} resp $data, "application/json" get "/users/@id": var row = db.getRow(sql"select * from users where id = ?", @"id") var data = %*{"id": row[0], "name": row[1]} resp $data, "application/json" runForever()
まとめ
ここまでで MySQL と連携し、ユーザ情報を取得するところまでできたので、次はユーザ情報を新規作成したり、更新するところをやっていきたいと思います
次の記事
- 作者: Dominik Picheta
- 出版社/メーカー: Manning Pubns Co
- 発売日: 2017/08/24
- メディア: ペーパーバック
- この商品を含むブログを見る