Magicode logo
Magicode
4 min read

V言語で超簡単なAPIサーバを作る。part.2

https://cdn.apollon.ai/media/notebox/876621e2-9f54-47b8-9cd1-7f5fe58bd2df.jpeg
カサレリア。katzenです。
前回、V言語で超簡単なAPIサーバを作る。part.1で、ブラウザアクセスでテキストを返せるようにしました。
  1. 起動すると指定ポートでListenする。
  2. 書き込みなどは行わず参照のみ。(Not RESTful)
  3. HTTPプロトコルで通信を行う。GET only
  4. ルーティングによりJsonを返す。
  5. パラメータを指定して、Jsonに埋め込める。
3まで完成している感じですね。
今回はJsonを返せるようにしましょう。
import jsonで使えそうです。
早速組み込んで行きましょう。
import vweb
import json

struct App{
  vweb.Context
}

struct Result {
  status bool
  message string
}

fn main() {
  vweb.run(&App{}, 8080)
}

fn (mut app App) index() vweb.Result {
  result := &Result{
    status: true
    message: "タイヤが空を飛ぶな"
  }
  res := json.encode(result)
  return app.text(res)
}
Resultという構造体を作って、Jsonで返すようにしました。
簡単ですね。
残すは5のパラメータを受け取り、戻りに反映する処理です。
indexでやると色々不都合があるので、
http://localhost/say/<message>みたいなインターフェースを作りましょう。
vwebによると、パラメータは["/<path>/:<param>"]の様にヒントを与えてあげればいいようです。
...
['/say/:message']
fn (mut app App) say(message string) vweb.Result {
  result := &Result{
    status: true
    message: "おかしいですよ!" + message + "さん"
  }
  res := json.encode(result)
  return app.text(res)
}
...
こんな感じですね。アクセスしてみましょう。
http://localhost:8080/say/カテジナ
{"status":true,"message":"おかしいですよ!カテジナさん"}
できましたね。パラメータがメッセージに入ります。
ここまで書いてちなみになのですが、
jsonを返す機能はvwebに標準で組み込まれています。
なので、import jsonとか実は必要ないですし、json.encodeなんかも必要ないです。
res := json.encode(result)
return app.text(res)
これを
return app.json(result)
とするだけで大丈夫です。ごめんなさい。
そして、なぜこれに気がついたかと言いますと、Webサーバはクライアント(ブラウザなど)に、これがどういった形式なのか伝える必要があります。
それがContext-Typeというものなのですが、 これをどう指定するのかなと調べていたら、jsonメソッドを使うことで実現していたというわけです。
完成したソースを載せておきます。
import vweb

struct App{
  vweb.Context
}

struct Result {
  status bool
  message string
}

fn main() {
  vweb.run(&App{}, 8080)
}


fn (mut app App) index() vweb.Result {
  result := Result{
    status: true
    message: "タイヤが空を飛ぶな" 
  }
  return app.json(result)
}

['/say/:message']
fn (mut app App) say(message string) vweb.Result {
  result := Result{
    status: true
    message: "おかしいですよ!" + message + "さん"
  }
  return app.json(result)
}
vwebはリファレンスが整っていない部分があるので、サンプルやソースを見て対応する感じになりますね。
超簡単なAPIサーバが完成しました。本当に簡単だったと思います。 しかし、これを改良していくことで、意図したAPIを作れるのではないでしょうか。
要望等があれば、機能追加をしたり、クラウドサービスでV言語を動かす方法を調べて紹介していきたいと思います。

Discussion

コメントにはログインが必要です。