デバッグのためのテストとして json を返すウェブサービスを Micronaut でつくる話。
Micronaut を使うと簡単にウェブサービスをつくることができます。 ここでは既にそれがインストールされているとして話をすすめます。 使用したバージョンは Micronaut Version: 2.5.6 です。
適当なディレクトリで、 myapp というプロジェクトを生成。言語は groovy を指定。
$ mn create-app myapp --build=gradle --lang=groovy
プロジェクトディレクトリに移動して、 item という名前でコントローラーの雛形を作成。
$ cd myapp
$ mn create-controller item
これで以下の2つのファイルが生成されます。
試しにこの状態で一度起動。
$ ./gradlew run
ポート 8080 でウェブサーバーが起動するので、ブラウザで http://localhost:8080/item/ にアクセスすると Example Response の文字列が表示されます。
ctrl + C して一旦webサーバを停止します。
それでは、json を返すように変更していきます。
item コントローラのコード ( src/main/groovy/myapp/ItemController.groovy ) を見てみましょう。
package myapp
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
@Controller("/item")
class ItemController {
@Get(uri="/", produces="text/plain")
String index() {
"Example Response"
}
}
現状では text/plain を返すことになっている。 今回は json を返すウェブサービスをつくりたいので、index メソッドを以下のように書きかえます。
@Get(uri="/", produces="application/json")
def index() {
[hello: 'world']
}
変更したら保存して、 ./gradlew run で再度サーバを起動します。
curl で結果を確認してみましょう。
$ curl http://localhost:8080/item
{"hello":"world"}
はい、できました。
実行するポート 8080 ではなく 9090 に変更したければ、設定ファイル ( src/main/resources/application.yml ) を以下のように書きかえます。
micronaut:
application:
name: myapp
server:
port: 9090
curl でテストしてみましょう。
$ curl http://localhost:9090/item
{"hello":"world"}
この json を返すウェブサービスを curl の代わりに node.js でテストしてみましょう。
myfetch という名前でプロジェクトを作成:
$ mkdir myfetch
$ cd myfetch
$ npm init -y
curl のようにウェブサーバからデータを取得するには javascript の世界では fetch を使うのがよさそう。 fetch を node.js で使うには node-fetch を使えば良いようです。
$ npm install node-fetch
index.js を用意:
const fetch = require('node-fetch');
const getMyJson = async ()=> {
const res = await fetch('http://localhost:9090/item/');
const data = await res.json();
return data;
};
getMyJson().then( (data)=> {
console.log(data);
});
実行:
$ node index
{ hello: 'world' }
Micronaut があれば、すぐにテスト用のウェブサービスのでっちあげが可能。