最初のFustify APIをセットアップする方法
APIルートのファーストを定義する方法
リクエストにスキーマ検証を追加する方法
ファーストプラグインをロードして使用する方法
最後に、このプロジェクトにこのファースト依存関係を追加したい:
次に、基本的なサーバーのセットアップを追加しましょう。以下のコードをコピーしてください:
<span>npm init -y </span>
ここにはいくつかのことが起こっています。最初にFustifyアプリケーションオブジェクトをロードし、ロギングを有効にします。次に、JSON応答で応答するルートルートを宣言します。コードスニペットの最後の部分は、アプリケーションがリクエストを受信するためにポート3000で聞いていることを示しています。
基本的なサーバーのセットアップが機能するかどうかを検証しましょう。まず、index.jsファイルを実行してサーバーを起動する必要があります:
<span>npm i fastify --save </span>
その後、ブラウザでhttp:// localhost:3000に移動します。次の回答を確認する必要があります
<span>touch index.js </span>
ステップ2:CRUDルートを定義します
/API /ブログですべてのブログを入手してください
コードを清潔に保つには、プロジェクトルートのコントローラーフォルダーを定義しましょう。ここでは、blogs.js。
というファイルを作成しますさらに、このファイルの上記のすべてのルートのさまざまなハンドラーを定義します。ハンドラーは常にREQ(リクエスト)と返信パラメーターを受け入れます。リクエストパラメーターは、リクエストパラメーターにアクセスしたり、ボディデータを要求したりするのに役立ちます。
/controller/blogs.jsファイルに次のコードを追加します:
/api/blogs/:id by req.params.idなどのルートのリクエストパラメーターにアクセスする方法に注意してください。ポストおよびパットルートの場合、Req.Bodyを介してリクエストの本体にアクセスできます。
ステップ2.2では、ルートハンドラーをルートオブジェクトに接続します。ステップ2.2:ブログルートとカップルブログコントローラーを定義します
<span>// Require the framework and instantiate it </span><span>const app = require('fastify')({ </span> <span>logger: true </span><span>}) </span> <span>// Declare a route </span>app<span>.get('/', function (req<span>, reply</span>) { </span> reply<span>.send({ hello: 'world' }) </span><span>}) </span> <span>// Run the server! </span>app<span>.listen(3000, (err<span>, address</span>) => { </span> <span>if (err) { </span> app<span>.log.error(err) </span> process<span>.exit(1) </span> <span>} </span> app<span>.log.info(<span>`server listening on <span>${address}</span>`</span>) </span><span>}) </span>
繰り返しますが、コードを清潔に保つには、プロジェクトルートのルートフォルダーを定義しましょう。ここでは、blogs.jsというファイルを作成します。このファイルは、ブログルートのルートオブジェクトを保持しています:
幸いなことに、Fustifyを使用すると、ルートオブジェクトを含む配列を定義できます。ここでは、以前に定義したハンドラーをさまざまなルートに組み合わせることができます。ブログコントローラーを要求することを忘れないでください。見てみましょう:
ここで、すべてのルートを定義しました。ただし、Fustifyはこれらのルートについては知りません。次のステップでは、ファーシフィーアプリケーションオブジェクトにルートを登録する方法を示しています。
ステップ2.3:ファーストルートを登録<span>node index.js </span>
<span>npm init -y </span>
完了しましたか?ブログが機能するかどうかを検証する時が来ました。ノードインデックスを使用してサーバーをスピンアップし、http:// localhost:3000/blogs/1にアクセスして、デモデータから最初のブログを取得します。次の結果を確認する必要があります
<span>npm i fastify --save </span>
ステップ3:スキーマ検証の追加
:IDパラメーターは型文字列
である必要があります検証オブジェクトをルートに接続するには、スキーマキーを定義する必要があります。 /api/blogs/:ルート配列のIDルートを探して、それに応じてオブジェクトを変更します。
<span>touch index.js </span>
<span>// Require the framework and instantiate it </span><span>const app = require('fastify')({ </span> <span>logger: true </span><span>}) </span> <span>// Declare a route </span>app<span>.get('/', function (req<span>, reply</span>) { </span> reply<span>.send({ hello: 'world' }) </span><span>}) </span> <span>// Run the server! </span>app<span>.listen(3000, (err<span>, address</span>) => { </span> <span>if (err) { </span> app<span>.log.error(err) </span> process<span>.exit(1) </span> <span>} </span> app<span>.log.info(<span>`server listening on <span>${address}</span>`</span>) </span><span>}) </span>
<span>node index.js </span>
さあ、間違いを犯して、IDフィールドのパラメーション検証をスティングからオブジェクトに変更しましょう。
<span>{ </span> <span>"hello": "world" </span><span>} </span>
APIから同じリソースをリクエストすると、次のエラーメッセージが表示されます。
<span>// Demo data </span><span>let blogs = [ </span> <span>{ </span> <span>id: 1, </span> <span>title: 'This is an experiment' </span> <span>}, </span> <span>{ </span> <span>id: 2, </span> <span>title: 'Fastify is pretty cool' </span> <span>}, </span> <span>{ </span> <span>id: 3, </span> <span>title: 'Just another blog, yea!' </span> <span>} </span><span>] </span> <span>// Handlers </span><span>const getAllBlogs = async (req<span>, reply</span>) => { </span> <span>return blogs </span><span>} </span> <span>const getBlog = async (req<span>, reply</span>) => { </span> <span>const id = Number(req.params.id) // blog ID </span> <span>const blog = blogs.find(blog => blog.id === id) </span> <span>return blog </span><span>} </span> <span>const addBlog = async (req<span>, reply</span>) => { </span> <span>const id = blogs.length + 1 // generate new ID </span> <span>const newBlog = { </span> id<span>, </span> <span>title: req.body.title </span> <span>} </span> blogs<span>.push(newBlog) </span> <span>return newBlog </span><span>} </span> <span>const updateBlog = async (req<span>, reply</span>) => { </span> <span>const id = Number(req.params.id) </span> blogs <span>= blogs.map(blog => { </span> <span>if (blog.id === id) { </span> <span>return { </span> id<span>, </span> <span>title: req.body.title </span> <span>} </span> <span>} </span> <span>}) </span> <span>return { </span> id<span>, </span> <span>title: req.body.title </span> <span>} </span><span>} </span> <span>const deleteBlog = async (req<span>, reply</span>) => { </span> <span>const id = Number(req.params.id) </span> blogs <span>= blogs.filter(blog => blog.id !== id) </span> <span>return { msg: <span>`Blog with ID <span>${id}</span> is deleted`</span> } </span><span>} </span> module<span>.exports = { </span> getAllBlogs<span>, </span> getBlog<span>, </span> addBlog<span>, </span> updateBlog<span>, </span> deleteBlog <span>} </span>
ステップ4:ファーストプラグインをロード
<span>mkdir routes </span><span>cd routes </span><span>touch blogs.js </span>
ここで、Fastifyのリッチプラグインエコシステムを利用しましょう。データベースの統合や承認セットアップなど、さまざまなタスクを使用するのに役立つプラグインを見つけることができます。 Fastifyプラグインを利用できるのに、なぜゼロから承認を書くことに時間を費やすのですか?多くの場合、特定の問題やタスクに役立つFastifyのエコシステム以外のパッケージを探したいと思うことがあります。ただし、リッチなプラグインエコシステムを提供することにより、ファストフィーは開発者エクスペリエンスを確実に改善するワンストップソリューションになります!
<span>const blogController = require('../controller/blogs'); </span> <span>const routes = [{ </span> <span>method: 'GET', </span> <span>url: '/api/blogs', </span> <span>handler: blogController.getAllBlogs </span> <span>}, </span> <span>{ </span> <span>method: 'GET', </span> <span>url: '/api/blogs/:id', </span> <span>handler: blogController.getBlog </span> <span>}, </span> <span>{ </span> <span>method: 'POST', </span> <span>url: '/api/blogs', </span> <span>handler: blogController.addBlog </span> <span>}, </span> <span>{ </span> <span>method: 'PUT', </span> <span>url: '/api/blogs/:id', </span> <span>handler: blogController.updateBlog </span> <span>}, </span> <span>{ </span> <span>method: 'DELETE', </span> <span>url: '/api/blogs/:id', </span> <span>handler: blogController.deleteBlog </span> <span>} </span><span>] </span>module<span>.exports = routes </span>
わかりました、実用的にしましょう! Fastify-ENVプラグインを使用したいと思います。これは、環境変数の読み込みと各変数のデフォルトの設定に役立ちます。したがって、この依存関係をプロジェクトに追加しましょう
<span>npm init -y </span>
<span>npm i fastify --save </span>
デフォルトでは、Fustify-ENVプラグインは、so.config.portのようなFustify Appオブジェクトを介してすべての環境変数を使用できるようにします。なぜ? Fastify-ENVプラグインは、ロードされた構成をコンフキーに添付します。ただし、必要に応じて、これを別のキーに変更できます。
ノードindex.jsでプロジェクトを開始し、出力を監視します。端末にポート変数が印刷されていることがわかります。使用する他の興味深いプラグイン?
Fastify-auth:fustifyで複数のauth関数を実行します
ご覧のとおり、Addhook関数は最初に耳を傾けたいフックを受け入れます。この例では、アプリケーションに登録されている新しいルートを聞きたいと考えています。次に、コールバック関数は、ルートURLやルートメソッドなど、多くの情報を含むルートオプション引数を受け入れます。
<span>touch index.js </span>
node index.jsでAPIを起動して、どのルートが登録されているかを確認しましょう。端子出力は次のようになります:
同じ出力がありますか?成功!同時に、これがFastifyチュートリアルの終わりでした。このプロジェクトを短い結論でまとめましょう。
ラッピング
<span>// Require the framework and instantiate it </span><span>const app = require('fastify')({ </span> <span>logger: true </span><span>}) </span> <span>// Declare a route </span>app<span>.get('/', function (req<span>, reply</span>) { </span> reply<span>.send({ hello: 'world' }) </span><span>}) </span> <span>// Run the server! </span>app<span>.listen(3000, (err<span>, address</span>) => { </span> <span>if (err) { </span> app<span>.log.error(err) </span> process<span>.exit(1) </span> <span>} </span> app<span>.log.info(<span>`server listening on <span>${address}</span>`</span>) </span><span>}) </span>
Fastifyは、リッチなプラグインエコシステムを利用できるようにする優れた軽量プロジェクトです。ゼロから機能を作成する代わりに、既存のプラグインを使用できます。言い換えれば、Fastifyは開発者向けのワンストップショップとして機能し、開発者エクスペリエンスを確実に改善します。 個人的には、アプリケーション内のさまざまなライフサイクルイベントを聞くことができるので、Fastify Hooks機能が好きです。
Fustifyの詳細については、次のドキュメントページをご覧ください。
fustifyを使用したREST APIの作成に関するよくある質問(FAQ)
Fustifyを備えたサーバーを作成するにはどうすればよいですか?あなたのアプリケーション。次に、新しいFastifyインスタンスを作成できます。基本的な例は次のとおりです。
fustify.listen(3000、(err、address)=> {
if(err)throw err
> fustify?
Fustifyでは、ルートメソッドを使用してルートを定義します。この方法は、オブジェクトを引数として受け取り、ルートのプロパティを定義します。例は次のとおりです。
fustify.route({
メソッド: 'get'、
url: '/'、
ハンドラー:function(request、neply){
Fastifyのエラーを処理するにはどうすればよいですか? Reply Objectのコードを使用して、メソッドを送信してエラー応答を送信できます。例は次のとおりです。
fustify.get( '/error'、function(request、reply){
reply.code(500).send(new error( 'internal server error'))
})
ファースト化でプラグインを使用するにはどうすればよいですか?
origin:true
})
Fastifyは、Fustify-schemaと呼ばれる組み込みの検証およびシリアル化ライブラリを提供します。このライブラリを使用して、着信要求を検証し、発信応答をシリアル化できます。例は次のとおりです。
fustify.route({
method: 'post'、
url: '/validate'、
schema:{
body:{
>タイプ: 'object'、
必須:['name'、 'email']、
Properties:{
name:{type: 'string'}、
email:{type: 'string '}
}
}
}、
Handler:function(request、Reply){
}
} )
Fustifyは、テスト目的のためのHTTP要求と応答をシミュレートできるようにする注入方法を提供します。例は次のとおりです。
fustify.inject({
メソッド: 'get'、
url: '/'、
}、(err、response)=> {
} console.log(response.payload)
})
他のnode.jsアプリケーションと同様に、ファーストアプリケーションを展開できます。 Heroku、AWS、Google Cloudプラットフォームなどのプラットフォームを使用できます。アプリケーションを展開するときに、Node_Env環境変数を生産に設定してください。ルートハンドラーのAsync/Awaitの構文を使用して、より読みやすい方法で非同期コードを作成できます。例は次のとおりです。
return result
})
以上がFustifyを使用して最初のREST APIを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。