2016-12-07 5 views
1

ユーザーは、RESTリソースとは異なる権限を持つことができます。リソースの削除や編集など。また、子リソースは異なるユーザー権限を持つことができます。RESTリソースのユーザー権利とステータスを表示

例:

GET /cats -> return all cats 
GET /cats/{id} -> return cat {id} 
UPDATE /cats/{id} -> update cat {id} 
POST /cats/{id}/like -> create a like to the cat {id} 
DELETE /cats/{id}/like -> delete your like to the cat {id} 

ユーザーが、私は彼に権利(許可されたアクション)とオブジェクトの状態を表示したい猫のリソースを要求します。この例では

  1. ユーザーが猫を更新するために許可されていますか?
  2. ユーザーは猫を気に入ることができますか?
  3. ユーザーはすでに猫を好きですか?

    1. 更新ボタン
    2. ボタンのように嫌いボタン

    どのように私はこの情報を追加することができます。私たちのUIは、オブジェクトに対して許可されたアクションを表示するには、この情報を使用する必要があります

私のリソースへの応答。 1つのリソースに情報を追加するだけでなく、オブジェクトのリストに情報を追加することも可能です。

許可されたすべての操作のhttpヘッダーのリンクについて考えました。しかし、これは1つのオブジェクトに対してのみ可能です。彼らのより良い解決策ですか?

答えて

1

コレクションを含むレスポンスのヘッダーにコレクション固有のリンクを含めることができない理由は不明です。私はそれが不可能であるというあなたの言葉であなたを連れてきますが、それはオプションでなければならないようです。

また、応答データの周囲に封筒を使用することもできます。これにより、リンクを含むメタデータをコレクションレベルに含めることができます。あなたは封筒として、あるいは直接のプロパティのいずれかとして、cat表現にlinksプロパティを追加する必要があります(コメントに基づく)

GET /cats?owner=12 
{ 
    "totalRecords": 2, 
    "links": [ ... ], 
    "records": [ ... ] 
} 

EDIT

。だから、あなたの猫は、次のようになります。

GET /cats/354 
{ 
    "name": "Poke", 
    ..., 
    "links": [ 
     { "rel": "like", "href": "/cats/12/like" }, 
     .... 
    ] 
} 

次に、あなたのコレクション内の各catは、それに関連し、関連するリンクがあります。これは一般的に受け入れられるヘッダの代わりにlinkの代わりに利用されています。

バリエーション:

  • { "rel": "like", "verb": "POST", "href": "/cats/12/like" }
  • としてリンクリソースに動詞を含むような一部の人々は、そのよう"links": { "like": "/cats/12/like", "delete": "/cats/12" }
+0

として、REFにリンクプロパティの名前を作るような一部の人々コレクションとして100匹の猫を返すと、ヘッダーリンクに100 *のアクションが許可されます。これはベストプラクティスではありませんか? – user1482309

+0

@ user1482309ああ、あなたが言っていることが分かります。私は私の応答を編集します。 –

+0

ありがとうエリック。私はこの考えについて話し合うつもりです。 – user1482309

関連する問題