ホームページ > ウェブフロントエンド > jsチュートリアル > Express 4でRESTFUL APIを作成します

Express 4でRESTFUL APIを作成します

Jennifer Aniston
リリース: 2025-02-21 09:57:11
オリジナル
1021 人が閲覧しました

Express 4でRESTFUL APIを作成します

Express 4のリリースにより、Restful APIを作成するのがさらに簡単になりました。単一のページアプリを作成している場合は、CRUD操作をサポートするRESTFUL WEBサービスが必ず必要になります。私の最後のチュートリアルは、Angularの$リソースを使用した単一ページのCrudアプリの作成に焦点を当てました。このチュートリアルでは、Express 4を使用してこのようなCRUDアプリのバックエンドAPIを設計する方法について説明します。

Express 3以降、多くの変更が変更されていることに注意してください。このチュートリアルは、Express 3からExpress 4にアプリをアップグレードする方法を説明していません。それでは、始めましょう。

キーテイクアウト

Express 4は、RESTFUL APIの作成を簡素化し、CRUDアプリケーション用のバックエンドAPIを簡単に設計できます。
    Express 4では、Expressコアの一部ではなくなったため、Body-Parserを個別にダウンロードする必要があります。このモジュールは、入ってくるリクエスト本体を解析するために使用され、Req.Bodyを介してPOSTリクエストの本文へのアクセスを可能にします。
  • Express 4 Method Express.Router()は、中水とルートを定義できる新しいルーターインスタンスを作成します。このルーターインスタンスは、app.use()を呼び出すことにより、他のミドルウェアと同様にメインアプリで使用できます。
  • Express 4は、Get、Post、Put、Deleteなどの標準のHTTPメソッドをサポートして、データベース、この場合は映画データベースでCRUD操作を実行します。これは、これらのHTTPリクエストを処理するルートを作成することで行われます。
  • ムービーアプリのAPIの作成
  • 私たちのアプリは、基本的なCRUD操作をサポートするシンプルな映画データベースになります。 Express 4をWebフレームワークとして、Mongoo -Osejsをオブジェクトモデリングツールとして使用します。映画のエントリを保存するには、Mongodbを使用します さらに進む前に、APIがどのように見えるかを見てみましょう:

ディレクトリ構造

アプリで次のディレクトリ構造を使用します。

Express 4でRESTFUL APIを作成します上記のディレクトリ構造に関するいくつかのポイントを次に示します

bin/www.jsは、アプリをブートストラップするために使用されます。

モデルディレクトリは、マングースモデルを保存します。このアプリには、ムービーと呼ばれるファイルが1つだけあります。

ルートディレクトリには、すべてのエクスプレスルートが保存されます。

Express 4でRESTFUL APIを作成しますapp.jsは、Expressアプリの構成を保持します

最後に、node_modulesとpackage.jsonは、node.jsアプリの通常のコンポーネントです。 必要な依存関係の取得

  1. APIを作成するには、次のモジュールを使用します。
  2. express
  3. ボディパーサー
  4. mongoose

注 - ボディパーサーは、エクスプレスコアの一部ではなくなりました。モジュールを個別にダウンロードする必要があります。したがって、Package.json。

にリストしました

これらのパッケージを取得するには、package.jsonの依存関係としてそれらをリストします。これが私たちのpackage.jsonファイルです:

<span>{
</span>  <span>"name": "Movie CRUD API",
</span>  <span>"version": "0.0.1",
</span>  <span>"private": true,
</span>  <span>"scripts": {
</span>    <span>"start": "node ./bin/www"
</span>  <span>},
</span>  <span>"main":"./bin/www",
</span>  <span>"engines": {
</span>     <span>"node": "0.10.x"
</span>   <span>},
</span>  <span>"dependencies": {
</span>    <span>"express": "~4.2.0",
</span>    <span>"body-parser": "~1.0.0",
</span>    <span>"mongoose": "~3.8.11"
</span>  <span>}
</span><span>}</span>
ログイン後にコピー
ログイン後にコピー

npmインストールを実行するだけで、すべての依存関係がダウンロードされ、node_modulesディレクトリの下に配置されます。

モデルの作成

映画データベースのAPIを構築しているため、映画モデルを作成します。ムービー。JSという名前のファイルを作成し、モデルディレクトリに配置します。以下に示すこのファイルの内容は、マングースモデルを作成します。

前のスニペットでは、新しいモデル、映画を作成します。各映画には、タイトル、リリース年、ディレクター、ジャンルの4つのプロパティがあります。最後に、モデルをModule.Exportsに配置して、外部からアクセスできるようにします。
<span>var mongoose=require('mongoose');
</span><span>var Schema=mongoose.<span>Schema</span>;
</span>
<span>var movieSchema = new Schema({
</span>  <span>title: String,
</span>  <span>releaseYear: String,
</span>  <span>director: String,
</span>  <span>genre: String
</span><span>});
</span>
module<span>.exports = mongoose.model('Movie', movieSchema);</span>
ログイン後にコピー
ログイン後にコピー
ルートの作成

すべてのルートはルート/ムービーにあります。開始するには、ムービーに次のことを追加します。JSファイル:

Express 4には、Express.router()という新しいメソッドがあり、新しいルーターインスタンスが提供されます。ミドルウェアとルートを定義するために使用できます。 Expressルーターの興味深い点は、ミニアプリケーションのようなものだということです。このルーターを使用してミドルウェアとルートを定義し、app.use()を呼び出すことにより、他のミドルウェアと同じようにメインアプリで使用できます。 すべての映画を取得する

<span>var Movie = require('../models/movie');
</span><span>var express = require('express');
</span><span>var router = express.<span>Router</span>();</span>
ログイン後にコピー
ログイン後にコピー

ユーザーが /API /ムービーにget requestを送信する場合、すべての映画を含む応答を送信する必要があります。これがこのためのルートを作成するスニペットです。

router.route()1つ以上のHTTP動詞を構成するために使用できる単一のルートインスタンスを返します。ここでは、GETリクエストをサポートしたいと考えています。したがって、get()を呼び出し、リクエストが届いたときに呼び出されるコールバックを渡します。コールバック内で、Mongooseを使用してすべての映画を取得し、JSONとしてクライアントに送り返します。

新しい映画の作成

router<span>.route('/movies').get(function(req<span>, res</span>) {
</span>  <span>Movie.find(function(err<span>, movies</span>) {
</span>    <span>if (err) {
</span>      <span>return res.send(err);
</span>    <span>}
</span>
    res<span>.json(movies);
</span>  <span>});
</span><span>});</span>
ログイン後にコピー
ログイン後にコピー
APIは、 /API /ムービーにPOSTリクエストが作成されたときに、データベースに新しい映画を作成する必要があります。 JSON文字列は、リクエスト本文として送信する必要があります。同じルート、 /ムービーを使用しますが、get()の代わりにメソッドpost()を使用します。

ここにコードがあります:

ここで、リクエスト本体から新しい映画インスタンスを作成します。これは、ボディパーサーが使用される場所です。次に、新しい映画を保存して、操作が成功していることを示す応答を送信します。

メソッドは()、post()などが同じルートインスタンスを返すことに注意してください。したがって、以下に示すように、あなたは実際に前の2つの呼び出しをチェーンすることができます。

映画の更新
router<span>.route('/movies').post(function(req<span>, res</span>) {
</span>  <span>var movie = new Movie(req.body);
</span>
  movie<span>.save(function(err) {
</span>    <span>if (err) {
</span>      <span>return res.send(err);
</span>    <span>}
</span>
    res<span>.send({ message: 'Movie Added' });
</span>  <span>});
</span><span>});</span>
ログイン後にコピー
ログイン後にコピー

ユーザーが映画を更新したい場合、json文字列をリクエスト本文として/api/movies/:idにput requestを送信する必要があります。名前付きパラメーター:IDを使用して、既存の映画にアクセスします。 Mongodbを使用しているため、すべての映画には_IDと呼ばれるユニークな識別子があります。したがって、パラメーターを取得し、特定の映画を見つけるためにそれを使用するだけです。これを行うコードは以下に示されています。

<span>{
</span>  <span>"name": "Movie CRUD API",
</span>  <span>"version": "0.0.1",
</span>  <span>"private": true,
</span>  <span>"scripts": {
</span>    <span>"start": "node ./bin/www"
</span>  <span>},
</span>  <span>"main":"./bin/www",
</span>  <span>"engines": {
</span>     <span>"node": "0.10.x"
</span>   <span>},
</span>  <span>"dependencies": {
</span>    <span>"express": "~4.2.0",
</span>    <span>"body-parser": "~1.0.0",
</span>    <span>"mongoose": "~3.8.11"
</span>  <span>}
</span><span>}</span>
ログイン後にコピー
ログイン後にコピー

ここで、新しいルート /ムービー /:IDを作成し、method put()を使用します。ムービーの呼び出し({_id:req.params.id})は、URLでIDが渡された映画を見つけるために使用されます。ムービーインスタンスができたら、リクエスト本体に合格したJSONに基づいて更新します。最後に、この映画を保存して、クライアントに応答を送信します。

映画を取得

単一の映画を読むには、ユーザーはルート/API/MOVIES/:IDにGETリクエストを送信する必要があります。上記と同じルートを使用しますが、今回はget()を使用します。

コードの残りの部分は非常に簡単です。渡されたIDに基づいて映画を取得し、ユーザーに送信します。
<span>var mongoose=require('mongoose');
</span><span>var Schema=mongoose.<span>Schema</span>;
</span>
<span>var movieSchema = new Schema({
</span>  <span>title: String,
</span>  <span>releaseYear: String,
</span>  <span>director: String,
</span>  <span>genre: String
</span><span>});
</span>
module<span>.exports = mongoose.model('Movie', movieSchema);</span>
ログイン後にコピー
ログイン後にコピー
映画の削除

ムービーを削除するには、ユーザーは/api/movies/:idに削除要求を送信する必要があります。繰り返しますが、ルートは上記と同じですが、メソッドは異なります(つまり、delete())。

メソッドMovie.Remove()はデータベースから映画を削除し、成功を示すメッセージをユーザーに送信します。

今、私たちはすべて設定されています。でも待って! RouterインスタンスをModule.Exportsに配置する必要があります。そうすれば、アプリでMiddleWareeとして使用できるようにする必要があります。したがって、これはファイルムービーの最後の行です。

<span>var Movie = require('../models/movie');
</span><span>var express = require('express');
</span><span>var router = express.<span>Router</span>();</span>
ログイン後にコピー
ログイン後にコピー
Appの構成

すべての構成はapp.jsに移動しますまず、必要なモジュールを必要とすることから始めます:

router<span>.route('/movies').get(function(req<span>, res</span>) {
</span>  <span>Movie.find(function(err<span>, movies</span>) {
</span>    <span>if (err) {
</span>      <span>return res.send(err);
</span>    <span>}
</span>
    res<span>.json(movies);
</span>  <span>});
</span><span>});</span>
ログイン後にコピー
ログイン後にコピー
次のステップは、Mongooseを介してMongodbに接続することです

最後に、ミドルウェアを構成します:

あなたが見ることができるように、私は他のミドルウェアと同じようにルーターを使用しました。ルートミドルウェアが /APIにマッピングされるように、App.use()の最初の引数として /APIを渡しました。したがって、最終的にAPI URLは次のようになります
router<span>.route('/movies').post(function(req<span>, res</span>) {
</span>  <span>var movie = new Movie(req.body);
</span>
  movie<span>.save(function(err) {
</span>    <span>if (err) {
</span>      <span>return res.send(err);
</span>    <span>}
</span>
    res<span>.send({ message: 'Movie Added' });
</span>  <span>});
</span><span>});</span>
ログイン後にコピー
ログイン後にコピー

/API/MOVIES

router<span>.route('/movies')
</span>  <span>.get(function(req<span>, res</span>) {
</span>    <span>Movie.find(function(err<span>, movies</span>) {
</span>      <span>if (err) {
</span>        <span>return res.send(err);
</span>      <span>}
</span>
      res<span>.json(movies);
</span>    <span>});
</span>  <span>})
</span>  <span>.post(function(req<span>, res</span>) {
</span>    <span>var movie = new Movie(req.body);
</span>
    movie<span>.save(function(err) {
</span>      <span>if (err) {
</span>        <span>return res.send(err);
</span>      <span>}
</span>
      res<span>.send({ message: 'Movie Added' });
</span>    <span>});
</span>  <span>});</span>
ログイン後にコピー
/api/movies/:id

router<span>.route('/movies/:id').put(function(req<span>,res</span>){
</span>  <span>Movie.findOne({ _id: req.params.id }, function(err<span>, movie</span>) {
</span>    <span>if (err) {
</span>      <span>return res.send(err);
</span>    <span>}
</span>
    <span>for (prop in req.body) {
</span>      movie<span>[prop] = req.body[prop];
</span>    <span>}
</span>
    <span>// save the movie
</span>    movie<span>.save(function(err) {
</span>      <span>if (err) {
</span>        <span>return res.send(err);
</span>      <span>}
</span>
      res<span>.json({ message: 'Movie updated!' });
</span>    <span>});
</span>  <span>});
</span><span>});</span>
ログイン後にコピー
ブートストラップ

次のコードはbin/www.jsに送られます。これはアプリをブートストラップします。
  • ノードbin/www.jsを実行することにより、APIはアップする必要があります!
  • APIのテスト
APIを作成したので、すべてが期待どおりに機能することを確認するためにテストする必要があります。 Chrome拡張機能であるPostmanを使用して、すべてのエンドポイントをテストできます。ポストマンでテストされている投稿と取得のリクエストを表示するいくつかのスクリーンショットを次に示します。

router<span>.route('/movies/:id').get(function(req<span>, res</span>) {
</span>  <span>Movie.findOne({ _id: req.params.id}, function(err<span>, movie</span>) {
</span>    <span>if (err) {
</span>      <span>return res.send(err);
</span>    <span>}
</span>
    res<span>.json(movie);
</span>  <span>});
</span><span>});</span>
ログイン後にコピー

結論

これは、ノードとエクスプレスで簡単にRESTFUL APIを作成する方法の基本的な概要でした。 Expressをより深く掘り下げたい場合は、必ずドキュメントをチェックしてください。何かを追加または尋ねたい場合は、お気軽にコメントしてください。

アプリのソースコードは、githubでダウンロードできます。

Express 4

で安らかなAPIを作成することについて、よくある質問(FAQ)

RESTFUL APIと他のタイプのAPIの違いは何ですか?

RESTFUL API、または表現状態転送APIは、RESTアーキテクチャスタイルの原理を順守するAPIの一種です。これらは無国籍です。つまり、クライアントからサーバーへの各リクエストには、リクエストを理解して処理するために必要なすべての情報が含まれている必要があります。これは、リクエスト間で状態を維持できるSOAPなど、他のタイプのAPIとは異なります。 RESTFUL APIは、Get、Post、Put、Deleteなどの標準のHTTPメソッドも使用し、理解しやすく使用できます。 4、app.get()メソッドを使用して基本ルートを作成できます。この方法は、パスとコールバック関数の2つの引数を取ります。コールバック関数は、指定されたパスにGETリクエストが行われるたびに実行されます。例は次のとおりです。

app.get( '/'、function(req、res){

res.send( 'hello world!');

});

ルートパス( '/')にgetリクエストが行われ、サーバーは「Hello World!」で応答します。リクエストを投稿しますExpress 4、app.post()メソッドを使用できます。このメソッドは、app.get()と同様に機能しますが、Get Requestsの代わりにPOSTリクエストに使用されます。例は次のとおりです。

app.post( '/'、function(req、res){
res.send( 'post request request Receece');
});
ルートパス( '/')に投稿リクエストが行われ、サーバーは「POSTリクエストを受信した」で応答します。 >ミドルウェア関数は、リクエストオブジェクト(Req)、応答オブジェクト(RES)、およびアプリケーションのリクエスト応答サイクルの次の関数にアクセスできる関数です。次の関数は、Expressルーターの関数であり、呼び出されると、現在のミドルウェアに続くミドルウェアを実行します。ミドルウェア関数は、次のタスクを実行できます。任意のコードを実行し、リクエストと応答オブジェクトを変更し、リクエスト応答サイクルを終了し、スタックの次のミドルウェアを呼び出します。 4?

Express 4は、組み込みのエラーハンドラーを提供します。これは、アプリで発生する可能性のあるエラーを処理します。特定のエラーを処理する必要がある場合は、独自のエラー処理ミドルウェア機能を作成できます。例は次のとおりです。

app.use(function(err、req、res、next){

console.error(err.stack);

res.status(500).send( '何かが壊れた! ');
});
この例では、アプリでエラーが発生した場合、コンソールにログに記録され、サーバーは500のステータスコードとのメッセージで応答します「何かが壊れた!」

Express 4ルートでパラメーターを使用するにはどうすればよいですか?

​​

ルートパラメーターを使用して、URLの動的値をキャプチャできます。これらの値は、ルートハンドラーで使用できます。例は次のとおりです。
app.get( '/users/:userid'、function(req、res){
res.send( 'user id is:' req.params.userid);
} );
この例では、 '/users/123'にget requestが行われると、サーバーは「ユーザーID:123」で応答します。 Express 4?

​​

Express 4は、静的ファイルを提供するために、組み込みのミドルウェア関数であるExpress.Static()を提供します。それを使用して、サーバー上のディレクトリからファイルを提供できます。例は次のとおりです。

app.use(express.static( 'public'));

この例では、「public」ディレクトリ内のファイルはルートURL( '/')から直接アクセスできます。 🎜>
Express 4でボディパーサーミドルウェアを使用するにはどうすればよいですか?

ボディパーサーミドルウェアは、着信要求ボディを解析するために使用されます。これにより、Req.Bodyを介してPOSTリクエストの本体にアクセスできます。例は次のとおりです。

var bodyparser = require( 'body-parser');

app.use(bodyparser.json());

app.use(bodyparser.urlencoded({extended:true}) );
この例では、ボディパーサーのミドルウェアは、JSONとURLエンコードされたボディを解析するように構成されています。 Express 4の404エラーを処理しますか?

ミドルウェアスタックの最後にミドルウェア関数を追加することで、404エラーを処理できます。他のルートハンドラーやミドルウェア関数がリクエストを処理していない場合、この関数は実行されます。例は次のとおりです。
app.use(function(req、res、next){

res.status(404).send( '申し訳ありません!');

});

この例では、存在しないパスにリクエストが行われた場合、サーバーは404のステータスコードと「ごめんなさい、それを見つけることができません!」というメッセージで応答します。 Expressを使用するにはどうすればよいですかExpress 4のルーター?
Express Routerは、エクスプレス4のミニアプリケーションであり、モジュール式の方法でルートを整理できます。 Express.router()を使用して新しいルーターを作成し、ミドルウェアとルートを追加してから、app.use()を使用してアプリで使用できます。例は次のとおりです。
var router = express.router();
router.get( '/'、function(req、res){
res.send( 'hello from the router!'); });

app.use( '/router'、router);

この例では、get requestが '/router'に作成されると、サーバーはサーバーが行われます「Hello from the Router!」で応答します。

以上がExpress 4でRESTFUL APIを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート