Home About
micronaut, node.js

Part 1: テスト用に json を返す ウェブサービスをつくる

デバッグのためのテストとして json を返すウェブサービスを Micronaut でつくる話。

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"}

node.js と fetch でテスト

この 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 があれば、すぐにテスト用のウェブサービスのでっちあげが可能。