ブループリントを有効にして 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 でのブループリントの設定の詳細をご覧ください。