0

現在、Node.js を使用して Web アプリの API を作成しようとしています。JSON データを API ユーザーに返すことを意図した API。

たとえば、私は次のエンドポイント/オブジェクトを持っています: - 記事 (記事のコレクション) - 記事 (単一の記事、各記事にはタグがあります) - タグ

独自の JSON データ形式を持つ各エンドポイント/オブジェクトは、次の例のように返す必要があります。

  • 記事: [{articleObject}, {articleObject}, {articleObject}]

  • 論文

    { id: 12, title: '私のすばらしい記事 *私は言ったし、私はそれを知っている', content: '何とか何とか何とか', タグ: [{tagObject}, {tagObject}, {tagObject}] }

各エンドポイントは必要なデータを取得するために他のエンドポイントを呼び出すことができます。例: Article エンドポイントは Tags エンドポイントを呼び出して記事タグ コレクションを取得できます。Tags エンドポイントは配列オブジェクトを返します。

私の質問:

  1. オブジェクト構造を管理する方法。エンドポイントが別のエンドポイントから呼び出された場合は配列/オブジェクトを返しますが、API ユーザーから呼び出された場合は JSON 文字列を返します。

  2. エンドポイントごとにオブジェクト テンプレートを作成する必要がありますか。プロセスは次のとおりです。

    • エンドポイントは Object Template を呼び出します。
    • オブジェクト テンプレートはデータベースからデータを取得します。
    • 他のエンドポイントから呼び出されると、エンドポイントはオブジェクト テンプレートを返します。
    • エンドポイントはテンプレート エンジンを呼び出して、オブジェクト テンプレートを api ユーザーの JSON 文字列に解析します。エンドポイントごとに JSON 文字列ビューが提供されます。
  3. テンプレートエンジンがオブジェクトテンプレートの下で処理してそれらを変数として扱うことができるもの.PHPでは、PHPオブジェクトを受け取ってそれらを変数として扱うことができるTwigを使用しています. ここで、Twigを使用してそれを行う方法を見つけることができます

オブジェクト テンプレート ファイルの内容の例:

var Tags = require('./tags');

module.exports = function(param){
  /* do fetching data from database for specified parameters */
  /* here */
  var data = {};

  return {
    id: function() {
      return data.id;
    },
    title: function() {
      return data.title;
    },
    description: function() {
      return data.description;
    },
    tags: function() {
      return Tags(data.id);
    }
  }
}

誰かが私にその道を示してくれることを願っています。

4

1 に答える 1

2

私はエクスプレスを使用してAPIを実行しています...次のようなことができます:

app.get('/api/article', authenticate, routes.api.article.get);

認証は、ユーザーを認証する単なるミドルウェア機能です。通常、これはセッションからユーザーを取得し、ログインしていることを確認します。

./routes/api.js 内

var Article = require('../models/article.js');

exports.api = {}
exports.api.article = {}
exports.api.article.get = function(req, res){
 //get article data here
 Article.find({created_by: req.session.user._id}).populate('tags').populate('created_by').exec(function(err, list){
   res.json(list);
 });
};

これは、mongoose と mongodb を使用していて、Tag スキーマへの参照を含む、これに似た Article スキーマを持っていることを前提としています。

var ArticleSchema = new Schema({
    name    : { type: String, required: true, trim: true }
  , description: { type: String, trim: true }
  , tags  : [{ type: Schema.ObjectId, ref: 'Tag', index: true }]
  , created_by  : { type: Schema.ObjectId, ref: 'User', index: true }
  , created_at    : { type: Date }
  , updated_at    : { type: Date }
});
于 2012-10-05T07:29:21.660 に答える