1

REST 仕様に従ってアプリケーションを設計していますが、以下をどのように構成すればよいかわかりません。

基本的な CRUD プロセスに従うプロジェクトがあります。また、基本的な CRUD プロセスに従うユーザーもいます。ただし、プロジェクトにユーザーを追加する操作があり、リクエストを行う方法がわかりません。

ユーザーは複数のプロジェクトを持つことができるので、何らかの PUT リクエストである必要があると考えていますが、プロジェクト ID は実際にはユーザー モデルの一部ではありません。

PUT /users/project/3

これにアプローチする方法について何か提案はありますか?

4

2 に答える 2

2

ユーザーは多くのプロジェクトを持つことができ、プロジェクトは多くのユーザーを持つことができるように聞こえます。その場合、その関係の管理は、user_id と project_id を持つ参加者のような名前を付けることができる結合テーブルを介して行うのが最適です。

次に、参加者をユーザーまたはプロジェクトのどちらで管理するかを選択できます。プロジェクト参加者を管理することは理にかなっています。新しい参加者を作成しているので、それは POST です。

POST /projects/:project_id/participants

ペイロードには user_id が含まれます。

于 2012-06-24T17:53:07.700 に答える
1

プロジェクトIDがユーザーモデルの一部ではない場合、それはユーザーIDの配列がプロジェクトモデルの一部であることを意味します...そうですか?したがって、これはユーザーをプロジェクトに追加するのに適切だと思います。

PUT /projects/(projectid)/users/(userid)

ただし、サービスの利用者(つまり、バックボーン)がこれらのURLを必要としない場合は、これらのURLをサポートする必要がない場合があります。たぶん、単一のエンドポイントでプロジェクトを更新したいだけです。

PUT /projects/(projectid)

また、Ajaxのポストコールには、「このプロジェクトの更新」リクエストの一部としてユーザーのリストが含まれます。

UIに応じて、Backboneのいずれかの形式のURLを使用することをお勧めします。URLの最初の形式は、「ユーザーxをプロジェクトyに追加する」などのリクエストにのみ役立ちます(たとえば、管理者が「このユーザーを現在のプロジェクトに追加する」をクリックしたときなど)。

URLの2番目の形式は、プロジェクトホールセールを更新するために使用する可能性のあるものであり、ユーザーのリスト、プロジェクトの名前などを含めることができます。それが「プロジェクトの編集」ビューです。

var ProjectModel = Backbone.Model.extend({
    defaults: {
        "project_name": "",
        "users: [0]
    },

    urlRoot: "/myrestapi/projects",

    url: function() {
        return this.urlRoot + "/" + this.cid;
    }
});

このモデルでのバックボーン保存要求は、URLへの(POST?PUT?)をトリガーします。

/myrestapi/projects/(cid)

プロジェクトのモデル状態を表す投稿データを使用して:

{ "project_name": "foo", "users": [15, 18, 42] }

次に、サーバーのデータストアへの更新をトリガーするのはRESTサービス次第です...

于 2012-06-24T05:56:09.507 に答える