Node.js の Expressフレームワークを利用して、最小のRESTサーバーを書いて、curl でデータの受け渡しを確認した。
検証に利用したプログラムの解説
nodejs
1 #!/usr/bin/env node
2
3 var express = require('express');
4 var app = express();
5 var debug = require('debug')('app');
6 var port = parseInt(process.env.PORT || '3000');
7
8 var bodyParser = require('body-parser');
9 app.use(bodyParser.json());
10 app.use(bodyParser.urlencoded({ extended: false }));
11
12 // 動作確認用
13 app.get('/', function(req, res) {
14 res.send('hello world');
15 });
16
17 // POST application/x-www-form-urlencoded で受け取るケース
18 app.post('/param', function(req, res) {
19 console.log("body = ", req.body);
20 console.log("name = ", req.body.name);
21 console.log("year = ", req.body.year);
22 res.send('OK');
23 });
24
25 // テキスト形式のJSONで受け取るケース
26 app.post('/json', function(req, res) {
27 console.log("body = ", req.body);
28 json = JSON.parse(req.body.json);
29 console.log("name = ", json.name);
30 console.log("year = ", json.year);
31 res.send('OK');
32 });
33
34 // イベント待機
35 app.listen(port);
3〜6行目
Expressフレームワークの初期化、ポート番号の取得
8〜10行目
POSTのデータをパースするためのミドルウェア設定です。 コンテントタイプ application/x-www-form-urlencoded のデータをパースして、結果をreqへセットする。
12〜14行目
HTTP GET / にアクセスがあると、コールバックするコードで、応答は'hello world'を返す。
17〜23行目
HTTP POST /param にアクセスがあると、コールバックするコードで、ミドルウェアによりパースされたPOSTデータが、reqへセットされてくる。 POSTデータに、nameやyearの値があれば表示する。
Curlリクエストの方法は、下記の「application/x-www-form-urlencodedで受け取るケース」を参照してください。
25〜32行目
HTTP POST /json にアクセスがあると、コールバックするコードで、前述の/paramと同様に動作する。 この部分では、POSTされたJSONのテキスト形式をデータをパースして、取り込みます。クライアントのプログラムで持っている変数データを、一括でテキストのJSON形式変換できるので、便利な受け渡し方法です。
Curlのリクセスは、下記の「テキスト形式のJSONで受け取るケース」を参照してください。
34〜35行目
サーバーの実行、イベント待機
GETでの動作確認
$ curl http://localhost:3000/
hello world
application/x-www-form-urlencodedで受け取るケース
リクエスト
$ curl http://localhost:3000/param -d "name=Maho Takara" -d "year=2017" -X POST
OK
サーバー側の実行結果
$ node app.js
body = { name: 'Maho Takara', year: '2017' }
name = Maho Takara
year = 2017
テキスト形式のJSONで受け取るケース
リクエスト
curl http://localhost:3000/json -d 'json={"name": "Maho Takara", "year": "2017"}' -X POST
OK
サーバー側の実行結果
$ node app.js
body = { json: '{"name": "Maho Takara", "year": "2017"}' }
name = Maho Takara
year = 2017