前回まででユーザ情報の取得と、一覧情報の取得ができるようになりました
今回はユーザの新規作成と更新を実装していきたいと思います
ユーザの新規作成
早速コードを書いてみます
post "/users": var params = request.formData # ① var name = params["name"].body # ② var id = db.tryInsertId(sql"insert into users (name) values (?)", name) # ③ var data = %*{"id": id, "name": name} resp $data, "application/json"
- form で送られたデータを
params
という変数に格納しています - form で送られた
name
という key のデータを取得しています - users テーブルに insert し、ID を取得しています
curl で実際にテストしてみます
$ curl -F name=enomotodev localhost:5000/users {"id":4,"name":"enomotodev"}
レスポンスはきちんと返ってきましたが、一覧にもアクセスして確かめてみましょう
$ curl localhost:5000/users {"total":4,"users":[{"id":"1","name":"foo"},{"id":"2","name":"bar"},{"id":"3","name":"baz"},{"id":"4","name":"enomotodev"}]}
新規作成されているのが確認できました!
ユーザの更新
今度はユーザデータの name の部分を更新してみたいと思います
patch "/users/@id": var params = request.formData var name = params["name"].body db.exec(sql"update users set name = ? where id = ?", name, @"id") var data = %*{"id": @"id", "name": name} resp $data, "application/json"
SQL を発行しているところ以外、新規作成のときとほとんど変わらないですね
curl でたたいてみます
$ curl -X PATCH -F name=enomotodev2 localhost:5000/users/4 {"id":"4","name":"enomotodev2"}
更新されたようなので、再度一覧にもアクセスして確かめてみます
$ curl localhost:5000/users {"total":4,"users":[{"id":"1","name":"foo"},{"id":"2","name":"bar"},{"id":"3","name":"baz"},{"id":"4","name":"enomotodev2"}]}
更新されているのが確認できました!
ここまでのコードは下記のようなかたちになりました
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" post "/users": var params = request.formData var name = params["name"].body var id = db.tryInsertId(sql"insert into users (name) values (?)", name) var data = %*{"id": id, "name": name} 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" patch "/users/@id": var params = request.formData var name = params["name"].body db.exec(sql"update users set name = ? where id = ?", name, @"id") var data = %*{"id": @"id", "name": name} resp $data, "application/json" runForever()
まとめ
Nim を使って簡単な API を作ってみましたが、やはりドキュメントが少なく、パッケージもあまり多くない印象です…
ですが、比較的簡単に色々作れるので、これからパッケージも自分で作ってみたいと思います
- 作者: Dominik Picheta
- 出版社/メーカー: Manning Pubns Co
- 発売日: 2017/08/24
- メディア: ペーパーバック
- この商品を含むブログを見る