NodeJS はしばらく前から業界に存在しています。非同期の性質と Chrome V8 エンジンのサポートにより、広く普及しています。
NodeJS は、開発者がアプリを作成するときに障害を回避できるように、さまざまなライブラリ、ツール、テンプレートを備えた多数のフレームワークを提供します。
Nodejs は、おそらくフルスタック アプリケーションを開発するのに最適な JavaScript フレームワークの 1 つです。 Nodejs を使用することに決めたら、 次のフレームワーク とプラグインがバックエンドおよび API サービスの開発に役立ちます。
急行
Express は、 NodeJS 用の最も人気のある Web および API 開発フレームワークの 1 つです。 Express JS は非常に広く使用されているため、ほぼすべての Web 開発プロジェクトが Express JS の統合から始まります。
ExpressJS を最初のプラグインとして選択する理由はたくさんあります。
- 開発タスクに必要なすべてをサポートする大規模な機能バンドル
- Web リクエストを関数にルーティングするための簡単なルーティング機能
- APIをコーディングするための体系化されたプラットフォームを提供します
- 他のサポートライブラリおよびプラグインのほとんどでサポートされています
- 基準に準拠するために一貫して保護および維持されます
- 素晴らしいコミュニティサポート
これらの利点に加えて、プラグインの開発者は使いやすいプロジェクト ジェネレーターも作成しました。このジェネレーターを使用すると、テンプレート プロジェクトを作成して、より迅速に作業を開始できます。
プロジェクトのセットアップ
Express の基本を学ぶプロジェクトを立ち上げましょう。システムにノードがインストールされていることを確認してください。ノードのインストール プロセスについては、この決定版ガイドを参照してください。
- プロジェクトフォルダーを作成します。
- ターミナルで開きます。
-
express
、body-parser
、cookie-parser
、cors
、およびnodemon
をインストールします。 - Index.js ファイルをプロジェクトに追加します。
-
nodemon index.js
コマンドを使用して、packages.json
ファイルにアプリケーション起動スクリプトを追加します。
パッケージ
- Express : これは、API の作成に役立つアプリケーションのコア パッケージです。
-
body-parser
: これは、API から受信したデータを解析し、それを
req.body
に追加するミドルウェアです。 -
cookie-parser:
これはヘッダー Cookie を解析し、それを
req.cookie
に追加するミドルウェアです。 - cors: これは、CORS を有効にするために使用されるミドルウェアです。
- nodemon: これは、ファイルが変更されるたびにサーバーを再起動するアプリケーションを実行するために使用されます。
これらは、私たちの作業を楽にするためのエクスプレス アプリケーションに必要な基本パッケージです。プロジェクトによっては、さらに多くのパッケージが必要になる場合があります。心配する必要はありません。パッケージを追加するにはコマンドを実行するだけです。
エクスプレスアプリ
さまざまな API を使用した基本的なアプリケーションを見てみましょう
const express = require("express");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const cors = require("cors");
// initializing the express
const app = express();
const port = 3000;
// adding the middlewares to the app
app.use(bodyParser.json());
app.use(cookieParser());
app.use(cors());
// req: we will use this paramter to get API request details
// res: we will use
app.get("/", (req, res) => {
return res.send("Hello, World!");
});
app.get("/json", (req, res) => {
return res.json({ greetings: "Hello, World!" }); // you can also use res.send({})
});
app.get("/path-params/:name", (req, res) => {
// all the path params will present in req.params object
const { name } = req.params;
return res.json({ greetings: `Hello, ${name}!` });
});
app.get("/query-params", (req, res) => {
// all the query params will present in req.query object
const { name } = req.query;
return res.json({ greetings: `Hello, ${name ? name : ""}!` });
});
app.post("/post", (req, res) => {
// data will present in req.body
const { name } = req.body;
console.log(req.body);
return res.json({ greetings: `Hello, ${name ? name : ''}!` });
});
app.listen(port, () => {
console.log(`App listening on port ${port}`);
});
npm start
でアプリケーションを起動し、作成したすべての API を試してください。各概念について詳しくは、
ドキュメント
をお読みください。
帆
Sails は 、本格的な MVC アーキテクチャ フレームワークです。 ExpressJS と SocketIO を中心に使用します。 Sails.js は、モデル オブジェクトを使用してデータベースとの迅速な統合を可能にするエンタープライズ グレードのアーキテクチャで人気を博しました。
利点の一部は次のとおりです。
- Sails.JS には、プロジェクト テンプレートをすぐに生成するためのプロジェクトが付属しています
- Sails.JS のフォルダー構造は非常によく整理されています
- オブジェクトモデルの開発とフロントエンドによる公開がスピーディ
- 認可、認証、前処理のためのミドルウェアを簡単に統合できます。
- AWS S3 および GridFS のサポートが組み込まれています
プロジェクトのセットアップ
sailsjs
プロジェクトを作成するには、
sail
という npm パッケージが必要です。以下のコマンドでグローバルにインストールしましょう。
npm install sails -g
プロジェクトを作成するディレクトリに移動します。次に、次のコマンドを実行して、
sailsjs
アプリを作成します。
sails new basic-app
テンプレートを選択するためのプロンプトが表示されます。 空の オプションを選択します。プロジェクトの作成が完了するまで待ちます。
お気に入りのコード エディターでプロジェクトを開きます。
sails lift
コマンドを実行してアプリケーションを実行します。ブラウザで
http://localhost:1337/
URL を開いて、アプリケーションを表示します。
コード エディターでアプリケーションを表示すると、多数のフォルダーとファイルが表示されます。すべてのフォルダーとファイルの詳細な説明は、
Sails のドキュメント
ページで見つけることができます。このチュートリアルでは、1 つの
api/controllers
と
config/routes.js
説明します。
SailsJSアプリ
Sailsjs アプリで API を作成する方法を見てみましょう。 Sailsjs アプリで API を作成するには、以下の手順を確認してください。
-
API エンドポイントを
config/routes.js
ファイルに追加します。 -
コマンド
sails generate action sample --no-actions2
を使用して、API エンドポイントのアクションを作成します。 - ステップ 2 で生成されたアクション ファイルに API コードを追加します。
ルート
API エンドポイントを追加すると、
routes.js
ファイルは次のコードのようになります。
module.exports.routes = {
"GET /": { action: "home" },
"GET /json": { action: "json" },
"GET /path-params/:name": { action: "path-params" },
"GET /query-params": { action: "query-params" },
"POST /post": { action: "post" },
};
各 API エンドポイントは 1 つのアクションを指します。前のセクションで説明したコマンドを使用して、これらのアクション ファイルを生成する必要があります。上記のエンドポイントのすべてのアクション ファイルを生成しましょう。
行動
5 つのエンドポイントを追加しました。各エンドポイントのそれぞれのコードを確認してみましょう。
ホーム.js
module.exports = async function home(req, res) {
return res.send("Hello, World!");
};
json.js
module.exports = async function json(req, res) {
return res.json({ greetings: "Hello, World!" });
};
パス-params.js
module.exports = async function pathParams(req, res) {
const { name } = req.params;
return res.json({ greetings: `Hello, ${name}!` });
};
post.js
module.exports = async function post(req, res) {
const { name } = req.body;
console.log(req.body);
return res.json({ greetings: `Hello, ${name ? name : ''}!` });
};
クエリパラメータ.js
module.exports = async function queryParams(req, res) {
const { name } = req.query;
return res.json({ greetins: `Hello, ${name ? name : ""}!` });
};
アクションを記述する別の方法もあります。フレームワークの詳細については、ドキュメントを参照してください。
ハピ
Hapi フレームワークは当初、ExpressJS フレームワークの欠点を克服するために構築されました。ウォルマートは、交通量の多いイベントに備えて準備をしていたときに、これらの欠点に気づきました。
Hapi.JS は、サービスと API を構築するための堅牢なフレームワークです。安定性と信頼性で知られています。
プロジェクトのセットアップ
Hapi.JS の基本に触れるためのプロジェクトを作成してみましょう。通常の NodeJS プロジェクトと同様に Hapi プロジェクトをセットアップできます。以下のコマンドを実行してプロジェクトをセットアップします。
cd your_project_floder_path
npm init -y ## to init node project
npm install @hapi/hapi ## installing core package to work with Hapi.JS
npm install nodemon ## to run our application
プロジェクト内に
index.js
ファイルを作成します。
nodemon index.js
コマンドを使用して、
package.json
ファイルに起動スクリプトを追加します。
HapiJSアプリ
Hapi の基本的な API は以下で確認してください。
const hapi = require("@hapi/hapi");
const app = async () => {
// initializing the hapi server
const server = hapi.server({
port: 3000,
host: "localhost",
});
server.route({
method: "GET",
path: "/",
handler: (request, h) => {
return "Hello, World!";
},
});
server.route({
method: "GET",
path: "/json",
handler: (request, h) => {
return { greetings: "Hello, World!" };
},
});
server.route({
method: "GET",
path: "/path-params/{name}",
handler: (request, h) => {
const name = request.params.name;
return { greetings: `Hello, ${name}!` };
},
});
server.route({
method: "GET",
path: "/query-params",
handler: (request, h) => {
const name = request.query.name;
return { greetings: `Hello, ${name ? name : ""}!` };
},
});
server.route({
method: "POST",
path: "/post",
handler: (request, h) => {
const data = request.payload;
console.log(data);
return { greetings: `Hello, ${data.name ? data.name : ""}!` };
},
});
// starting the server
await server.start();
console.log(`App is running on ${server.info.uri}`);
};
app();
Hapi の基礎を学ぶためにさまざまな API を追加しました。すべてのルートを別のファイルに移動して、クリーンにすることができます。 Hapi について詳しくは、 ドキュメント を参照してください。
合計
Total は、リアルタイム、チャットボット、IoT、e コマース、REST アプリケーションを構築するためのすぐに使用できるプラットフォームを提供するサーバー側プラットフォームです。また、プレミアム ユーザーが自分のアプリケーションをプラットフォーム上で公開し、他のユーザーが使用できるようにすることもできます。
Total.JS を開発のベースとして使用する利点は次のとおりです。
- ラピッドプロトタイピング能力
- より迅速な開発を可能にする、事前に構築されたコンポーネントが多数付属しています
- 簡単に取得してアプリケーションに統合できるアプリケーションのライブラリを保持します。
- 大規模プロジェクトでの作業分散を簡素化できるモジュールベースのフレームワーク
- コミュニティチャット
- すぐに使用できるアプリケーションのストアを一貫して維持します
ループバック
LoopBack は 、API エクスプローラーと統合された API 開発フレームワークです。 API エクスプローラーは、すぐに入手できる LoopbackJS SDK を使用してクライアント側アプリケーションに簡単に接続できます。 SDK は、Android、AngularJS、Angular 2+、iOS アプリケーションで利用できます。
LoopBack は、GoDaddy、Symantec、Bank of America などから信頼されています。彼らのサイトには、バックエンド API、安全な REST API、データの永続化などを作成するための多くの例が見つかります。そして、そう、API エクスプローラーが組み込まれています。
プロジェクトのセットアップ
ループバック プロジェクトを設定し、それを使用して基本的な API を作成する方法を見てみましょう。
次のコマンドを実行して、ループバック CLI をインストールします。
npm install -g @loopback/cli
以下のコマンドを実行してプロジェクトのセットアップを開始します。
lb4 app
ターミナル内のすべての質問に答えます。好みに応じて質問に答えることができます。
お気に入りのコード エディターでアプリを開き、
npm
start コマンドで実行します。
http://localhost/
に移動して、ループバック アプリを確認します。
ループバックアプリ
src
フォルダー内を確認すると、
controllers
があります。ここは、API を含むコントローラーを追加する場所です。
ループバックでコントローラーを作成するには、次のコマンドを使用する必要があります。
lb4 controller
以下のさまざまな API を確認してください。コントローラーに複数の API を追加しました。
import {get, param, post, requestBody} from '@loopback/rest';
interface Response {
greetings: string;
}
export class Controller {
@get('/hello')
home(): string {
return 'Hello, World!';
}
@get('/json')
json(): Response {
return {greetings: 'Hello, World!'};
}
// accessing path param using @param decorator
@get('/path-params/{name}')
pathParams(@param.path.string('name') name: string): Response {
return {greetings: `Hello, ${name}!`};
}
@get('/query-params')
queryParams(@param.query.string('name') name: string): Response {
return {greetings: `Hello, ${name ? name : ""}!`};
}
// accessing path param using @requestBody decorator
@post('/post')
postMethod(@requestBody() data: any): Response {
console.log(data);
const {name} = data;
return {greetings: `Hello, ${name ? name : ''}!`};
}
}
API を作成し、REST API の基本に必要なさまざまなものにアクセスする方法を説明しました。 LoopBack フレームワークにはこれ以外にも多くの機能があります。彼らの ドキュメントは、 フレームワークを深く掘り下げるのに最適な場所です。
流星
Meteor は 、優れた設計を核とした完全な Web 開発および API 作成ソリューションです。 Meteor は、アプリケーションを迅速に構築するために使用されるフレームワークです。 Meteor アーキテクチャを使用すると、コードを書き直すことなくフロントエンドとバックエンドでコードを実行できます。
これにより、開発速度が大幅に向上します。 Meteor を使用する大きな利点は次のとおりです。
- ハイブリッドアプリケーション開発フレームワーク
- 単一のコード ベースで、デスクトップ アプリ、Web アプリ、モバイル アプリケーションを構築できます。
- コードのフットプリントを削減するのに役立つ、緊密に結合されたフロントエンドが付属しています。
- さまざまなプラグインによる高度な拡張性
- さまざまなフロントエンド テンプレート フレームワークをサポート
- ホットコードプッシュをサポートし、モバイルアプリケーションを更新する必要性を排除します。
再修正
Restify を使用して、本番環境に対応した意味的に正しい RESTfull Web サービスを構築します。
関連する Express JS モジュールのみを使用するため、他のフレームワークと比較してコードベースが軽量になります。 Netflix、Pinterest、Joyent などから信頼されており、これらを選択すれば間違いはありません。
プロジェクトのセットアップ
Restify プロジェクトをセットアップして、基本的な API の作成方法を見てみましょう。次のコマンドを実行して、新しい修正プロジェクトを作成します。
続行する前に、ノードのバージョンが 11 であることを確認してください。 Restify はノードの最新バージョンをサポートしていません。
cd your_project_folder
npm init -y ## initializing node project
npm i restify ## installing core package
npm i restify-plugins ## to add some parsing middlewares to our application
npm i nodemon ## to run our application
すべてのパッケージをインストールした後、
nodemon index.js
コマンドを使用して
package.json
ファイルに起動スクリプトを追加します。プロジェクトに
index.js
ファイルを追加することを忘れないでください。
アプリを再調整する
基本を学ぶためにいくつかの API を作成しましょう。
const restify = require("restify");
const restifyPlugins = require("restify-plugins");
function home(req, res, next) {
res.send("Hello, World!");
next();
}
function json(req, res, next) {
res.json({ greetings: "Hello, World!" }); // you can also use req.send(JSONData)
next();
}
function pathParams(req, res, next) {
const { name } = req.params;
res.json({ greetings: `Hello, ${name}!` });
next();
}
function queryParams(req, res, next) {
const { name } = req.query;
res.json({ greetings: `Hello, ${name ? name : ""}!` });
next();
}
function post(req, res, next) {
const data = req.body;
console.log(data);
res.json({ greetings: `Hello, ${data.name ? data.name : ""}!` });
next();
}
// creating restify server
const server = restify.createServer();
// adding parsing middlewares
server.use(restifyPlugins.jsonBodyParser({ mapParams: true }));
server.use(restifyPlugins.queryParser({ mapParams: true }));
// adding routes
server.get("/", home);
server.get("/json", json);
server.get("/path-params/:name", pathParams);
server.get("/query-params", queryParams);
server.post("/post", post);
// starting the app
server.listen(3000, function () {
console.log(`App is running at ${server.url}`);
});
フレームワークの詳細については、restify の ドキュメントを 確認してください。
コア
Koa は 主にコード ジェネレーターを活用して、開発者が開発をスピードアップできるようにします。セッション、リクエスト、Cookie、データ トランザクションの管理に役立つさまざまなミドルウェアとプラグインが付属しています。
Express と同じチームが koa を設計しています。 Nodejs 7.6 以降で動作し、開始するための サンプルが 豊富にあります。
プロジェクトのセットアップ
次のコマンドを使用して koa プロジェクトをセットアップしましょう
cd your_project_folder
npm init -y ## initializing the node project
npm i koa ## core koa package
npm i koa-route ## route package for handling API routes
npm i koa-bodyparser ## parser package to parse the request body
npm i nodemon ## to run
コアアプリ
koa を使用した API の作成は、これまでに説明した他のフレームワークと同様に簡単です。コードを見てみましょう。
const koa = require("koa");
const route = require("koa-route");
const bodyParser = require("koa-bodyparser");
const app = new koa();
const home = async (ctx) => {
ctx.body = "Hello, World!";
};
const json = async (ctx) => {
ctx.body = { greetings: "Hello, World!" };
};
// all path parameters will will pased to the function with the same name that's provided in the route
const pathParams = async (ctx, name) => {
ctx.body = { greetings: `Hello, ${name}!` };
};
const queryParams = async (ctx) => {
const name = ctx.query.name;
ctx.body = { greetings: `Hello, ${name ? name : ""}!` };
};
const post = async (ctx) => {
const {
body: { name },
} = ctx.request;
ctx.body = { greetings: `Hello, ${name ? name : ""}!` };
};
app.use(bodyParser());
app.use(route.get("/", home));
app.use(route.get("/json", json));
app.use(route.get("/path-params/:name", pathParams));
app.use(route.get("/query-params", queryParams));
app.use(route.post("/post", post));
app.listen(3000);
今すぐ koa ドキュメント の探索を開始できます。
ネスト
Nest は、 サーバー側ノード アプリケーションを構築するためのフレームワークです。 HTTP サーバーの内部では Express を使用します。また、Fastify を使用して構成することもできます。
TypeScript をサポートしており、OOP の概念、関数型プログラミング、および関数型リアクティブ プログラミングを使用して構築されています。その中にプロジェクトを作成し、基本的な API の記述方法を見てみましょう。
プロジェクトのセットアップ
次のコマンドを実行してプロジェクトを作成します。
npm i -g @nestjs/cli ## installing nest CLI globally
nest new your_project_name ## creating a project with nest CLI
ネスト アプリ
アプリケーションの src フォルダー内にいくつかのファイルがあります。
app.controller.ts
は、ここで API を含めるファイルです。基本的なアプリケーションの作成方法のみを説明することに注意してください。
API のさまざまな概念を示すさまざまな基本 API を見てみましょう。
import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common';
import { AppService } from './app.service';
export interface IResponse {
greetings: string;
}
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get('/')
home(): string {
return 'Hello, World!';
}
@Get('/json')
json(): IResponse {
return { greetings: 'Hello, World!' };
}
@Get('/path-params/:name')
pathParams(@Param() params): IResponse {
const { name } = params;
return { greetings: `Hello, ${name}!` };
}
@Get('/query-params')
queryParams(@Query() params): IResponse {
const { name } = params;
return { greetings: `Hello, ${name ? name : ''}!` };
}
@Post('/post')
post(@Body() body): IResponse {
const { name } = body;
return { greetings: `Hello, ${name ? name : ''}!` };
}
}
アプリケーションを実行し、すべての API を確認します。これらの API をサービス層に記述し、コントローラーでアクセスすることもできます。
さらに詳しく学習し、フレームワークを理解するには 、nest のドキュメント にアクセスしてください。
高速化
Fastify は 、NodeJS フレームワーク ファミリの別のフレームワークです。名前が示すように、これは世の中で最速の NodeJS フレームワークの 1 つであると主張しています。フレームワークの中核の一部を見てみましょう。
- 高速かつ高パフォーマンス。コードの複雑さに基づいて、1 秒あたり最大 30,000 のリクエストを処理できると主張しています。
- TypeScript フレンドリー。
- 開発者にとって使いやすい表現力豊かな API により、迅速な開発が可能です。
- ロガーが内蔵されています。 Pino (NodeJS ロガー) を使用します。
プロジェクトのセットアップ
API 開発の基礎を学ぶために fastify プロジェクトをセットアップしましょう。次のコマンドを実行すると、新しい fastify プロジェクトがセットアップされます。
npm install --global fastify-cli ## installing fastify CLI
fastify generate project_name ## creating project with fastify CLI
Fastifyアプリ
Fasitfy CLI が生成したプロジェクト。現在のところ、API を書くことだけが心配です。新しい API を作成するには、
routes/root.js
ファイルを開きます。次の API をファイルに追加します。
module.exports = async function (fastify, opts) {
fastify.get("/", async function (request, reply) {
return "Hello, World!";
});
fastify.get("/json", async function (request, reply) {
return { greetings: "Hello, World!" };
});
fastify.get("/path-params/:name", async function (request, reply) {
const { name } = request.params;
return { greetings: `Hello, ${name}!` };
});
fastify.get("/query-params", async function (request, reply) {
const { name } = request.query;
return { greetings: `Hello, ${name ? name : ""}!` };
});
fastify.post("/post", async function (request, reply) {
const { name } = request.body;
return { greetings: `Hello, ${name ? name : ""}!` };
});
};
アプリケーションを起動し、すべての API をテストします。これらは API を作成するための基本です。フレームワークの詳細については、 fastify のドキュメント にアクセスしてください。
小さなhttp
tinyhttp は、軽量で Express のような JS フレームワークです。ロガー、JWT、CORS ミドルウェアが組み込まれています。小さなプロジェクトを立ち上げて、その基本を学びましょう。
プロジェクトのセットアップ
次のコマンドを実行して tinyhttp プロジェクトを設定します。
cd you_project_folder
npm init -y
npm i @tinyhttp/app ## core tinyhttp package
npm i milliparsec ## to parse the request data and add it to request object to body key
npm i nodemon ## to run our application which will restart automatically whenever files changes
もう一つやるべきことがあります。
type
キーと value
module
package.json
ファイルに追加します。 tinyhttp は
require
をサポートしていないため、これを追加しています。代わりに
import
ステートメントを使用する必要があります。
tinyhttpアプリ
tinyhttp の API は Express アプリとほぼ同じです。その中のさまざまな API を確認してみましょう。
import { App } from "@tinyhttp/app";
import { json } from "milliparsec";
const port = 3000;
const app = new App();
app.use(json());
// req: we will use this paramter to get API request details
// res: we will use
app.get("/", (req, res) => {
res.send("Hello, World!");
});
app.get("/json", (req, res) => {
res.json({ greetings: "Hello, World!" }); // you can also use res.send({})
});
app.get("/path-params/:name", (req, res) => {
// all the path params will present in req.params object
const { name } = req.params;
res.json({ greetings: `Hello, ${name}!` });
});
app.get("/query-params", (req, res) => {
// all the query params will present in req.query object
const { name } = req.query;
res.json({ greetings: `Hello, ${name ? name : ""}!` });
});
app.post("/post", (req, res) => {
// data will present in req.body
const { name } = req.body;
res.json({ greetings: `Hello, ${name ? name : ""}!` });
});
app.listen(port, () => {
console.log(`App running on port ${port}`);
});
フレームワーク について詳しくは、小さなドキュメントをご覧ください。
ソケットIO
SocketIO は、複数のプログラミング言語で使用できる Web ソケット フレームワークです。
NodeJS では、SocketIO を使用して、チャットボット、スコア ティッカー、ダッシュボード API などの Web ソケット アプリケーションを構築できます。 SocketIO には、従来の NodeJS Web ソケット ライブラリに比べて大きな利点があります。
- WebソケットのカスタムURLルーティングのサポート
- すべてのソケットに対して自動生成された識別子
- データをブロードキャストするためのソケット ルームの管理が簡単
- Express JS との統合が容易になりました
- Redis によるクラスタリングをサポート
- 追加プラグインによるソケット認証のサポート (socketio-auth)
- HTTP 1.1 をサポートしないサーバーに対する組み込みのフォールバック HTTP プロトコル ベースの処理
結論
人々はプロジェクト全体で NodeJS を広く使用しています。その結果、さまざまなフレームワークから選択できるようになります。フレームワークを見ると、ほとんどのフレームワークに同様の API があります。したがって、NodeJS と任意のフレームワークについて十分な知識がある場合は、他の NodeJS フレームワークを始めるのに十分です。
これらのフレームワークがあるため、アプリケーションの開発は簡単ではありません。気に入ったフレームワークを上手に活用し、他のフレームワークも検討し続けてください。
コードを効率的にデバッグ、作成、管理するために、いくつかの Node.js パッケージを探索することもできます。
コーディングを楽しんでください 🙂