GetだけのRestサーバを作る(nodejs express使用)
まえおき
RestサーバからGetで情報もらってきて、それに応じて動くプログラムを書くことになった。 そのRestサーバは他のところでこれから作る…となると、まずは自前でRestサーバを立てるしかない。
コード書かずに作りたいなーと思ったら、 nodejsで動くJSON Serverがあった。
db.jsonにルールを書いて食わせれば、特にコードなしでRESTサーバが構築できる。 こんなデータを返すんだよね~というイメージ共有には良かった。
しかし、パラメータ(クエリ)に応じてデータ返す…となると、 パッと見やり方(コードの書き方)が分からなかった(´・ω・`)
もともとやりたいのはGetで値を返すだけ。JSON Serverを理解するよりも、 JSON ServerもWebサーバ機能として使ってるExpressだけ使ってコード書いたほうが楽そう。。
他の言語なら、JavaのJersey、pythonのeveあたりが良さそうだったけど、 最近Hubotをいじっていることもあり、nodejs + express 作ってみることにした。
環境構築
Ubuntu 17.10 を使用した。nodeやnpmを最新にするやりかたは、 qiitaの記事 Ubuntuに最新のNode.jsを難なくインストールする - Qiita が良い感じ。
コマンドを羅列しておくと、こんな感じ(クリックで展開)
sudo apt install nodejs npm # いったん標準のnodejsとnpmを入れる sudo npm install n -g # Node version management の nコマンドを入れる sudo n stable # nで安定版の最新に sudo apt-get purge -y nodejs npm # 標準のnodejsとnpmを消す node -v # 一応コマンドがいるか確認 npm -v
あとはexpressと、expressテンプレ生成のexpress-generatorを入れればOK。
npm install -g express express-generator
テンプレ生成
express <アプリ名>
でテンプレが生成される。特にオプションなしで実行すると、
デフォルトのjadeは今後デフォルトじゃなくなるぜ、ってwarningが出るので…
$ express restTest warning: the default view engine will not be jade in future releases warning: use `--view=jade' or `--help' for additional options ...(以下略)
express --view=pug <アプリ名>
のように、今後デフォルトになるpugを指定すると良さそう。
$ express --view=pug restTest create : restTest create : restTest/package.json create : restTest/app.js create : restTest/public create : restTest/routes create : restTest/routes/index.js create : restTest/routes/users.js create : restTest/views create : restTest/views/index.pug create : restTest/views/layout.pug create : restTest/views/error.pug create : restTest/bin create : restTest/bin/www create : restTest/public/javascripts create : restTest/public/images create : restTest/public/stylesheets create : restTest/public/stylesheets/style.css install dependencies: $ cd restTest && npm install run the app: $ DEBUG=resttest:* npm start
そして表示通りに install dependencies してあげる。
$ cd restTest && npm install npm notice created a lockfile as package-lock.json. You should commit this file. added 123 packages in 9.726s
一度expressサーバ起動して…
$ DEBUG=resttest:* npm start
ブラウザから、サーバのIP:3000にアクセスして、応答が来ればOK。
restTest APIを作成
app.js には restTest にアクセスが来たら、restTest.js で処理するよ、を追記する(diff↓)
@@ -9,2 +9,3 @@ var users = require('./routes/users'); +var restTest = require('./routes/restTest'); @@ -26,2 +27,3 @@ app.use('/users', users); +app.use('/restTest', restTest);
あとは routes/restTest.js に処理を書いてあげる。 試しに、restTest/pokemon?lang=ja が来たら日本語を、その他なら英語を、lang指定がなければ変なJSONを返す処理を書いてみる。
var express = require('express'); var router = express.Router(); router.get('/pokemon', function (req, res) { var lang = req.query.lang; var message; if (lang == null) message = 'langがなっしー' else if (lang == 'ja') message = 'ゲットだぜ!' else message = 'Gotcha!' var jsonMessage = {'pokemon':message}; res.json(jsonMessage); }); module.exports = router;
expressサーバを起動して、こんどはcurlでアクセスしてみる。
$ curl localhost:3000/restTest/pokemon?lang=ja {"pokemon":"ゲットだぜ!"} $ curl localhost:3000/restTest/pokemon?lang=tekitou {"pokemon":"Gotcha!"} $ curl localhost:3000/restTest/pokemon {"pokemon":"langがなっしー"}
応答きたきた。
req.query.ほげほげ でクエリ内容が見れて、応答書くだけなので楽だなあ。
参考情報
- Express - Node.js web application framework (express本家サイト)
- Node.js + ExpressでREST API開発を体験しよう[作成編] - Qiita
ポケットモンスター モンスターコレクション モンスターボール モンスターボール
- 出版社/メーカー: タカラトミー(TAKARA TOMY)
- 発売日: 2017/07/15
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る