はじめに
前回、Rustの環境構築をしたので今回はサーバーを実装します。
単純なAPIサーバーとして以下の実装をしていきます。
- GET
/system/ping
でpongを返す -
POST
/system/ping
で{"ping" : "value"}
を送ると、{"pong" : "value"}
を返す
Tideの起動
Tideを動かしてみます。
任意の場所でプロジェクトを作ります。
% cargo new example-tide
% cd example-tide
Cargo.tomlのdependenciesに以下を追記します。
[dependencies]
tide = "0.13.0"
async-std = { version = "1.6.0", features = ["attributes"] }
main.rsを以下に変更します。
ここまでできたらcargo runします。
試しにcurlしてみましょう。
% curl localhost:8080
Hello, world!
Webサーバーの起動に成功しました。
「GET /system/pingでpongを返す」を実装
以下のように5行目を変更します。
curlしてみましょう。
% curl localhost:8080/system/ping
pong
できましたが、APIサーバーとしては扱いやすいようにjsonで返したいです。
Rustでjsonといえばserde_jsonですが、Tideはすでにjson macroを持っています。
ですので、serde_jsonを使わずともjsonを返すことが可能です。
以下のように5行目を変更します。
curlしてみましょう。
% curl localhost:8080/system/ping
{"ok":"pong"}
jsonで返すことができました。
「POST /system/ping
で{"ping" : "value"}
を送ると、{"pong" :
"value"}
を返す」を実装する
6行目にPOSTを受け付ける記述を追記します。(この時点ではPOSTパラメータを無視しています)
curlしてみましょう。
% curl -XPOST localhost:8080/system/ping -d '{"ping":"value"}'
{"ok":"pong"}
やった!POSTで受付に成功しています。
それではPOSTパラメータを受け取り、値を返すようにします。
まずはserdeとserde_jsonをdependenciesに追加します。
[dependencies]
tide = "0.13.0"
async-std = { version = "1.6.0", features = ["attributes"] }
serde = "1.0.114"
serde_json = "1.0"
serdeは構造体をSerialize、Deserializeする時に使います。これで構造体を簡単にjsonにすることができます。(ここはもしかしたらTideがやってくれる...?)
以下のようにmainを修正します。
curlしてみましょう。
% curl -XPOST localhost:8080/system/ping -d '{"ping":"value"}'
{"pong":"value"}
できました!
おわりに
今回はTideでルーティング、GETとPOSTができるようになりました。
次回は、ちゃんとResponseを返す(ステータスコードなど)ところまでやりたいと思います。
0 件のコメント:
コメントを投稿