Magicode logo
Magicode
0
4 min read

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

カサレリア。katzenです。

前回、V言語で超簡単なAPIサーバを作る。part.1で、ブラウザアクセスでテキストを返せるようにしました。

  1. 起動すると指定ポートでListenする。
  2. 書き込みなどは行わず参照のみ。(Not RESTful)
  3. HTTPプロトコルで通信を行う。GET only
  4. ルーティングによりJsonを返す。
  5. パラメータを指定して、Jsonに埋め込める。

3まで完成している感じですね。

今回はJsonを返せるようにしましょう。

公式

vlib

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

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