1

Restlet API のセットを最適にレイアウトする方法を見つけようとしています。私は User エンティティを持っています。これは標準の CRUD 操作を持っている可能性があり、残りにうまく適合しますが、「パスワードのリセット」や「終了」のようなものもあります。

これをレイアウトする最良の方法は何ですか?

これが私が考えていたことです:

/1.0/user/update        //perhaps this would just be a PUT on /1.0/user
/1.0/user/resetPassword //This would reset the password, but also send an email.
/1.0/user/terminate     //This might do some additional cleanup

次に、このように実際にアタッチする UserResource を作成します

/1.0/user/{actionType}

処理コードは次のようになります (擬似):

action = request.getAttributes().get("actionType");
if (action == "update") {
   do update
} elif (action == "resetpassword") {
   do resetpassword
} elif (action == "terminate") {
   do terminate
}

本当に悪い考えですか?本当に忍者のアイデア?

4

2 に答える 2

1

いい考えだと思います。アプリケーションを RESTful にしたい場合は、User リソースの表現にリンクを提供し、それらを選択したアクションを実行する URI として文書化する必要があります。

Sun Cloud APIは次のことを行います

  • VM を GET すると、機能を実行する URI である「コントローラー」を含む表現 VM が返されます ( VM メディア タイプの説明を参照してください) 。
  • クライアントはメディア タイプを認識し、コントローラを認識します (たとえば、VM は「開始」、「停止」などを提供します。
  • その特定の VM の制御リソースの URI はすぐそこにあります

ご覧のとおり、 or を使用する場合/1.0/user/resetPassword/1.0/user?op=resetPasswordor/1.0/resetPassword?userId=xyzzyが少し無関係である場合、クライアントは本当に気にする必要がないため、表現内のリンクをたどるだけです。

また、このような操作には POST を使用することを忘れないでください。これらの操作は一般に冪等ではなく、おそらく副作用があるからです。

于 2010-08-14T08:40:21.153 に答える
1

これらはどうですか?

PUT /user/bob 
DELETE /user/bob/password 
DELETE /user/bob 

また、クライアントはこれらの URL を他のドキュメントから発見する必要があるという mogsie の指摘を忘れないでください。事前に知っておくべきではありません。

于 2010-08-14T13:53:58.713 に答える