sails.jsで複数のAPIバージョンを維持する方法

ジェイソンシムズ

誰かがsails.jsを使用するときにAPIの複数のバージョンを維持するためのアイデアを持っていますか?次のような簡単な例を想像してみてください。

// Request
GET /api/v1/catVids?min_view_count=10000

// Response
[{"video_title": "top cat fails"}, {"video_title": "funny-ass cats"}] 

ユーザーはAPIのv1を積極的に使用していますが、既存の機能を壊す要件が変更されました。たとえば、属性名が変更されます。したがって、この新しい動作の要求を満たすために、別のコントローラーを利用する必要があります。私がやりたいのは、両方のAPIを共存させて、下位互換性が損なわれないようにすることです。

// Request
GET /api/v2/catVids?minimum_view_count=10000

// Response
[{"title": "top cat fails"}, {"title": "funny-ass cats"}] 

ただし、これを実装するための最良の方法がわかりません。それが機能すると思う1つの方法は、sailsアプリ内で次のディレクトリ設定を使用することです。

api/
|-- controllers/
|---- v1/
|------ CatController.js
|---- v2/
|------ CatController.js
|-- models/
|---- v1/
|------ Cat.js
|---- v2/
|------ Cat.js

他の誰かが同様のシナリオに遭遇したか、またはトピックに関する提案があるかどうか疑問に思っています。

sgress454

ネストされたコントローラーはSailsによって完全にサポートされているため、例のようにコントローラーをサブディレクトリに配置する必要はありません。ただし、ネストされたモデルは、あいまいさが生じるため、完全にはサポートされていません(この問題に関するこのコメント参照してください)。Cat.jsという名前の2つのモデルファイルを別々のサブフォルダーに配置すると、それらは衝突し、Sailsが持ち上げられたときに、2番目のモデルファイルがメモリ内の最初のファイルを上書きします。

とにかくコードで2つのモデルバージョンを区別する方法が必要になるため、これは一種の学術的なポイントです。つまり、v1コントローラーでは、v1Catモデルを参照していることを確認する必要があります。v2についても同様です。最も簡単な解決策は、例のようなスキームを使用することですが、モデル(または少なくともv1以降のすべて)にサフィックスを追加します。

api/
|-- controllers/
|---- v1/
|------ CatController.js
|---- v2/
|------ CatController.js
|-- models/
|---- v1/
|------ Cat.js
|---- v2/
|------ Cat_v2.js

モデルのサブフォルダーはSailsによって無視されるため、ブループリントが希望どおりに機能することを確認するため_configに、コントローラーにプロパティを追加して、コントローラーに正しいモデルを使用させることができます。

api / controllers / v1 / CatController.js

module.exports = {
  _config: {
    model: 'cat'
  },
  ...
}

api / controllers / v2 / CatController.js

module.exports = {
  _config: {
    model: 'cat_v2'
  },
  ...
}

アップデート(Sails 1.0の場合)

_configコントローラでのの使用は、Sails1.0では無効になりました。代わりに、parseBlueprintOptionsconfig関数使用して、ブループリントが動作するモデルを設定できます。例:

parseBlueprintOptions: function(req) {

  // Get the default query options.
  var queryOptions = req._sails.hooks.blueprints.parseBlueprintOptions(req);

  // Add the _v2 suffix to the `using` property.
  queryOptions.using = queryOptions.using + '_v2';

  return queryOptions;

}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AngularJS + sails.js

分類Dev

Sails.jsで複数のテンプレートエンジンを使用することは可能ですか?

分類Dev

Sails JS Model Rest API

分類Dev

Sails.Js-sails.Jsでページ付けを行う方法

分類Dev

Sails.js Waterline UPDATE:複数の更新を処理する方法

分類Dev

RabbitMQとSails.js

分類Dev

Sails js Error in file Upload

分類Dev

Only run my sails.js hook on `sails lift`, not `sails run`

分類Dev

sails.jsでバックエンドのみを生成する

分類Dev

sails.jsのバックボーン

分類Dev

Create subfolders in Sails.js /api/controllers

分類Dev

ソケットを使用して、Sails.jsコレクションのクライアント側の同期を維持する

分類Dev

Windows8のSails.js

分類Dev

Sails.js の find() 日付

分類Dev

SailsJS - using sails.io.js with JWT

分類Dev

Sails.js / waterline:groupBy + count

分類Dev

Optional file uploads with Sails.js

分類Dev

Sails.js RESTAPI検証

分類Dev

How to use Validations in sails.js?

分類Dev

喫水線(Sails.js):AND条件

分類Dev

Sails Js view engine with layout sections support?

分類Dev

Sails.js route redirect with a custom policy

分類Dev

Assets not loading in sails.js app

分類Dev

Sails.js - Postgresql Adapter multiple schemas

分類Dev

Sails js SSH DB接続

分類Dev

opbeatとsailsの統合

分類Dev

Sails.jsコントローラー内で関数を呼び出す方法

分類Dev

sails.jsでデータベースを移行する方法は?

分類Dev

Sails.jsをインストールする方法