ブループリントを有効にして sails lift を実行すると、フレームワークはモデルと設定を調べ、特定のルートを自動的にバインドします。これらの暗黙的なブループリントルート(「シャドウルート」または単に「シャドウ」と呼ばれることもあります)を使用すると、config/routes.js ファイルでルートを手動でバインドしなくても、アプリが特定のリクエストに応答できます。有効にすると、ブループリントルートは対応するブループリントアクション(下の「アクションルート」を参照)を指し、これらのアクションはすべてカスタムコードで上書きできます。
Sails には 4 種類のブループリントルートがあります
REST ブループリントは、find、create、update、destroy アクションを含む、モデルの従来の REST API を公開するために Sails が自動的に生成するルートです。RESTful ルートのパスは常に /:modelIdentity または /:modelIdentity/:id です。これらのルートは、HTTP "動詞" を使用して実行するアクションを決定します。
たとえば、rest が有効になっている場合、アプリに Boat モデルがあると、次のルートが生成されます
find ブループリントを使用して検索します。findOne ブループリントを使用して検索します。create ブループリントを使用して作成します。update ブループリントを使用して更新します。destroy ブループリントを使用して削除します。Boat モデルに、drivers という属性を介して Driver モデルとの「多対多」の関係がある場合、次の追加ルートが利用可能になります。
:id として指定された ID を持つボートレコードに関連付けられたドライバーのレコードを、populate ブループリントを使用して検索します。:fk 値と等しいドライバーを、ID が :id として指定されたボートの drivers コレクションに、add ブループリントを使用して追加します。:fk 値と等しいドライバーを、ID が :id として指定されたボートの drivers コレクションから、remove ブループリントを使用して削除します。drivers コレクション全体を、replace ブループリントを使用して置き換えます。生成したアプリのスタイルによっては、rest ブループリントルートがデフォルトで有効になっている場合があり、不正アクセスを回避するために ポリシーで保護されていれば、本番環境での使用に適している可能性があります。「Web アプリ」テンプレートを選択した場合、rest ブループリントルートはデフォルトで有効になりません。
注意:ほとんどの Web アプリ、マイクロサービス、さらには REST API でさえ、最終的には「作成」、「更新」、「削除」ほど単純ではないカスタム機能が必要になります。その時が来たら、独自のカスタムアクションを作成することを恐れないでください。カスタムアクションとルートは、多くの場合、RESTful API として整理されるべきであり、必要に応じてブループリントと組み合わせて使用できます。何よりも、Node.js での async/await の導入のおかげで、カスタムアクションの作成にコールバックを使用する必要はなくなりました。
- CSRF 保護が有効になっている場合は、POST/PUT/DELETE アクションに CSRF トークンを提供するか、無効にする必要があります。そうしないと、403 Forbidden レスポンスが返されます。
- アプリにモデルの名前と一致する名前のコントローラーが含まれている場合、独自のコントローラーアクションを提供することで、RESTful ルートが指すデフォルトのアクションを上書きできます。たとえば、カスタムの
findアクションを含むapi/controllers/BoatController.jsコントローラーファイルがある場合、GET /boatルートはそのアクションを指します。- また、通常どおり、コントローラーを使用しているか、スタンドアロンアクションを使用しているかに関係なく、同じロジックが適用されます。(Sails に関しては、アプリがメモリにロードされて
sails liftで正規化されると、アクションがどこから来たかにかかわらず、すべてのアクションは同じに見えます。)config/routes.jsに上記の RESTful ルートのいずれかに一致するルートがアプリに含まれている場合は、デフォルトのルートの代わりに使用されます。
ショートカットルートは、ブラウザの URL バーからモデルにアクセスできるようにする、単純な(開発モードのみの)ハックです。
ショートカットルートは次のとおりです
| ルート | ブループリントアクション | URL の例 |
|---|---|---|
| GET /:modelIdentity/find | find | https://:1337/user/find?name=bob |
| GET /:modelIdentity/find/:id | findOne | https://:1337/user/find/123 |
| GET /:modelIdentity/create | create | https://:1337/user/create?name=bob&age=18 |
| GET /:modelIdentity/update/:id | update | https://:1337/user/update/123?name=joe |
| GET /:modelIdentity/destroy/:id | destroy | https://:1337/user/destroy/123 |
| GET /:modelIdentity/:id/:association/add/:fk | add | https://:1337/user/123/pets/add/3 |
| GET /:modelIdentity/:id/:association/remove/:fk | remove | https://:1337/user/123/pets/remove/3 |
| GET /:modelIdentity/:id/:association/replace?association=[1,2...] | replace | https://:1337/user/123/pets/replace?pets=[3,4] |
ショートカットルートは、Sails が本番環境で起動した場合は常に無効にする必要があります。ただし、特に ターミナルを使用しないことを好む場合は、開発中に非常に便利です。
- RESTful ルートと同様に、ショートカットルートは、一致するコントローラーでアクションを提供するか、
config/routes.jsでルートを提供することで上書きできます。- 同様の RESTful/ショートカットルートに対して同じアクションが実行されます。たとえば、Sails が
api/models/User.jsをロードしたときに作成するPOST /userおよびGET /user/createルートは、同じコードを実行して応答します(ブループリントアクションを上書きした場合でも)。- モデルの
schema設定がfalseに設定された NoSQL データベース(MongoDB など)を使用している場合、ショートカットルートは、不明な属性のパラメータ値をすべて文字列として解釈します。number型のplayers属性がない場合は、https://:1337/game/create?players=2を実行するときは注意してください!
アクションシャドウルート(または「アクションシャドウ」)が有効になっている場合、Sails はカスタムコントローラーアクションのルートを自動的に作成します。これは、特に開発プロセスの初期段階で、ルートを手動でバインドする必要をなくすことでバックエンド開発を迅速化する場合に役立つことがあります。有効にすると、コントローラーのすべてのアクションに対して GET、POST、PUT、および DELETE ルートが生成されます。
たとえば、bar メソッドを持つ FooController.js ファイルがある場合、sails.config.blueprints.actions が有効になっている限り、/foo/bar ルートが自動的に作成されます。RESTful およびショートカットシャドウとは異なり、暗黙的なアクションごとのシャドウルートでは、コントローラーに対応するモデルファイルがある必要はありません。
index アクションが存在する場合、追加の裸のルートが作成されます。最後に、すべての actions ブループリントは、便宜上、オプションのパスパラメータ id をサポートします。
Sails v1.0 以降、アクションシャドウはデフォルトで無効になっています。本番環境でも問題ない場合があります。ただし、本番環境でのデプロイで引き続きコントローラー/アクションの自動ルーティングを使用する場合は、安全でない/意図しないコントローラーロジックを GET リクエストに誤って公開しないように十分に注意する必要があります。たとえば、/config/routes.js ファイルで、レスポンスターゲット構文を使用して、特定のメソッドまたはパスを簡単にオフにすることができます。
'POST /user': {response: 'notFound'}
- アクションルートはすべての HTTP 動詞(GET、PUT、POST など)に応答します。アクション内で
req.methodを使用して、使用されたメソッドを特定できます。
アクションシャドウ(sails.config.blueprints.actions)が有効になっている場合、index という名前のアクションに対して、追加のルートシャドウルートが自動的に公開されます。たとえば、index アクションが含まれる FooController.js ファイルがある場合、そのアクションに対して /foo シャドウルートが自動的にバインドされます。同様に、api/controllers/foo/index.js にスタンドアロンアクションがある場合、/foo ルートが自動的に公開されます。
さまざまなカテゴリのブループリントルートを有効/無効にする方法を含め、Sails でのブループリントの設定の詳細をご覧ください。