2016-09-26 6 views
0

JSONAPI仕様でexpress.jsのAPIをビルドしており、sequelize.jsモデルを持っています。たとえば、User名前、メール、残高、last_login_timeなどの属性を持つモデルJSONAPIで指定されたゲストユーザーとauthrizedユーザーの `User`モデルをシリアル化するベストプラクティスは何ですか?

クライアントアプリケーションのユーザーがサードパーティのユーザーAPIに関するデータを要求する場合、名前やlast_login_timeなどのパブリック属性のみで応答する必要があります。

クライアントアプリケーションのユーザーが自分自身についてのデータを要求する場合、APIは公開属性と非公開属性で応答する必要があります。

シリアライザとしては、jsonapi-serializer libを使用します。私は2つの異なるシリアライザを作成

var JSONAPISerializer = require('jsonapi-serializer').Serializer; 

module.exports = new JSONAPISerializer('users', { 
    attributes: ['name'] 
}); 

Sould:私はそのようなシリアライザを持っていますか?ほとんどすべてのモデルに2つのシリアライザがあり、それが参照の混乱につながる可能性があるので、問題につながることはありませんか?

var User = sequelize.define('User', { 
    ... 
    instanceMethods: { 
     serializeApi: function() { 
      return User.apiSerializer().serialize(this); 
     } 
    } 
}; 

User.apiSerializer = function() { 
    return new JSONAPISerializer('users', { 
     attributes: ['name'] 
    }); 
} 

答えて

0

はそうのようなinstanceMethodを使用してください。

User.find(...).then((user) => { 
    res.json(user.serializeApi()); 
}); 
+0

あなたのアプローチは良いです。しかし、私の問題は、彼が彼のプロフィールデータを取り出すときなど、許可されたユーザーのためのいくつかの追加の属性をシリアル化する方法ですか? – Dmitro

+0

別の新しいモデルである 'user.profile'のように? – user3254198

+0

'email'フィールドを' user'から 'user.profile'に移動するのがいいですか? – Dmitro

関連する問題