Express、Restify、hapi、およびLoopBackでのREST API開発

Node.jsアプリケーションで作業している場合は、あなたや他の人が使用する何らかのAPIを持っている可能性があります。 確かにREST APIになり、ジレンマが発生します-どのツールとアプローチを使用するか。 結局のところ、選択肢はとても広いです...



画像



信じられないほど活発なNode.jsコミュニティのおかげで、NPMの「残り」の結果の数は圧倒的です。 それぞれに独自の実装とアプローチがありますが、一部にはNode.jsでREST APIを作成する際に共通点があります。







エクスプレス



最も一般的なアプローチは、Expressを使用してリソースへのアクセスを許可することです。 これにより簡単に開始できますが、その後はより難しくなります。



Express 4.xの最新バージョンのルーターを使用すると、リソースは次のようになります。



var express = require('express'); var Item = require('models').Item; var app = express(); var itemRoute = express.Router(); itemRoute.param('itemId', function(req, res, next, id) { Item.findById(req.params.itemId, function(err, item) { req.item = item; next(); }); }); itemRoute.route('/:itemId') .get(function(req, res, next) { res.json(req.item); }) .put(function(req, res, next) { req.item.set(req.body); req.item.save(function(err, item) { res.json(item); }); }) .post(function(req, res, next) { var item = new Item(req.body); item.save(function(err, item) { res.json(item); }); }) .delete(function(req, res, next) { req.item.remove(function(err) { res.json({}); }); }) ; app.use('/api/items', itemRoute); app.listen(8080);
      
      







長所 短所
  1. 低エントリしきい値、ExpressはNode.jsアプリケーションのほぼ標準です。
  2. 完全なカスタマイズ。


  1. すべてのリソースは手動で作成する必要があり、その結果、多くの繰り返しコードが表示されるか、さらに悪いことに、独自のライブラリが表示されます。
  2. 各リソースには、テストまたは500番目のエラーの簡単なチェックが必要です。
  3. リファクタリングは、すべてをどこでも支配する必要があるため、苦痛になります。
  4. 標準的なアプローチはありません。独自のアプローチを探す必要があります。


Expressは素晴らしいスタートですが、最終的には「独自の」アプローチの苦痛を感じるでしょう。





改めて



RestifyはNode.js API分野では比較的古いプレーヤーですが、非常に安定しており、積極的に開発されています。 適切なRESTサービスを構築するために作成され、意図的にExpressに似ています。



Expressに似ているため、構文はほぼ同じです。



 var restify = require('restify'); var Item = require('models').Item; var app = restify.createServer() app.use(function(req, res, next) { if (req.params.itemId) { Item.findById(req.params.itemId, function(err, item) { req.item = item; next(); }); } else { next(); } }); app.get('/api/items/:itemId', function(req, res, next) { res.send(200, req.item); }); app.put('/api/items/:itemId', function(req, res, next) { req.item.set(req.body); req.item.save(function(err, item) { res.send(204, item); }); }); app.post('/api/items/:itemId', function(req, res, next) { var item = new Item(req.body); item.save(function(err, item) { res.send(201, item); }); }); app.delete('/api/items/:itemId', function(req, res, next) { req.item.remove(function(err) { res.send(204, {}); }); }); app.listen(8080);
      
      







長所 短所
  1. APIがサポートしているプラ​​ットフォームで実行されている場合、DTraceサポート。
  2. テンプレートやレンダリングなどの追加機能はありません。
  3. リクエストレート制限の調整。
  4. SPDYサポート


短所はエクスプレスと同じです-多くの余分な作業。







ハピ



hapiは、Walmart Labsチームが開発したあまり知られていないフレームワークです。 ExpressやRestifyとは異なり、わずかに異なるアプローチを採用しており、すぐに使用できる機能が増えています。



 var Hapi = require('hapi'); var Item = require('models').Item; var server = Hapi.createServer('0.0.0.0', 8080); server.ext('onPreHandler', function(req, next) { if (req.params.itemId) { Item.findById(req.params.itemId, function(err, item) { req.item = item; next(); }); } else { next(); } }); server.route([ { path: '/api/items/{itemId}', method: 'GET', config: { handler: function(req, reply) { reply(req.item); } } }, { path: '/api/items', method: 'PUT', config: { handler: function(req, reply) { req.item.set(req.body); req.item.save(function(err, item) { res.send(204, item); }); } } }, { path: '/api/items', method: 'POST', config: { handler: function(req, reply) { var item = new Item(req.body); item.save(function(err, item) { res.send(201, item); }); } } }, { path: '/api/items/{itemId}', method: 'DELETE', config: { handler: function(req, reply) { req.item.remove(function(err) { res.send(204, {}); }); } } } ]); server.start();
      
      







長所 短所
  1. 要求の受信を完全に制御します。
  2. ドキュメントの生成に関する詳細なヘルプ。


ExpressやRestifyなどのhapiは優れた機能を提供しますが、それらの使用方法を理解する必要があります。



Express、Restify、およびhapiは優れたスタートアップソリューションですが、APIの開発を計画している場合は、悪い選択かもしれません。





ループバック



StrongLoop LoopBackは、REST APIを介してアプリケーションをデータに接続するための本格的なNode.jsフレームワークです。 Ruby on Railsで一般的になった「 配置の配置 」マントラを採用しています





 var loopback = require('loopback'); var Item = require('./models').Item; var app = module.exports = loopback(); app.model(Item); app.use('/api', loopback.rest()); app.listen(8080);
      
      





多くの魔法が舞台裏で発生しますが、これらのリソースを作成するコードは6行だけです。

 GET /items GET /items/count GET /items/findOne GET /items/{id} GET /items/{id}/exists POST /items PUT /items PUT /items/{id} DELETE /items/{id}
      
      





画像



APIを簡単に学習するには、組み込みのエクスプローラーモジュールを接続するだけです。

 var explorer = require('loopback-explorer'); app.use('/explorer', explorer(app, {basePath: '/api'}));
      
      







localhost :8080 / explorerを開いて、このクールなドキュメントを入手してください:

画像



LoopBackの例は非常に単純ですが、RPCリソースについてはどうですか?

 var loopback = require('loopback'); var explorer = require('loopback-explorer'); var remoting = require('strong-remoting'); var Item = require('./models').Item; var app = module.exports = loopback(); var rpc = remoting.create(); function echo(ping, callback) { callback(null, ping); } echo.shared = true; echo.accepts = {arg: 'ping'}; echo.returns = {arg: 'echo'}; rpc.exports.system = { echo: echo }; app.model(Item); app.use('/api', loopback.rest()); app.use('/explorer', explorer(app, {basePath: '/api'})); app.use('/rpc', rpc.handler('rest')); app.listen(8080);
      
      







これで次のことができます。

 $ curl "http://localhost:8080/rpc/system/echo?ping=hello" { "echo": "hello" }
      
      







画像



長所 短所
  1. 非常に高速なREST API開発。
  2. 構成の配置。
  3. 組み込みの既製モデル。
  4. RPCサポート。
  5. 完全にカスタマイズ可能。
  6. 豊富なドキュメント。
  7. プロジェクトに継続的に取り組んでいるチームは、Node.jsの主要な貢献企業です。
  8. 商用サポート。


フレームワークは多くの詳細で構成されているため、エントリのしきい値は少し高くなっています。







次は何ですか






All Articles