1

新しいプロジェクトが近づいていて、RESTに夢中になっています。ただし、インターフェイスは非常に限られているようです。RESTはオブジェクト固有の相互作用をサポートしていますか、それとも単純なCRUDに限定されていますか?

例:学校管理アプリにはStudentオブジェクトがあります。次のことができるはずです。

RegisterNewStudent (some data)

各学生オブジェクトは、ビジネスオペレーションを処理する必要があります。

Student.FixName(name data)
Student.ChangeSchool(school data)
Student.Graduate(classrank data)
Student.ChangePassword(password data)

私はメッセージキューを使用してCQRSを実装してきましたが、これらはそれぞれ個別のコマンドになります。ただし、RESTでは、次のように制限されているようです。

PUT Student (all data about student)
POST Student/id (update student record with any/all fields changed)
DELETE Student/id

ここで何かが足りませんか?ライフサイクル/状態変更ロジックはRESTfulソリューションのどこに実装されますか?生徒の学校の登録を変更するには、名前を変更するのとは異なるロジック(および場合によっては異なる権限)が必要です。クライアントに任意/すべてのフィールドの「更新」を投稿させてから、クライアントが意図している操作を推測する必要がありますか?

//編集:

これは私が苦労しているようなものですか?

PUT /Students {data about new student}
POST /Students/314/School {data about different school}
POST /Students/314/Name {data to fix name, ie add middle name}
POST /Students/314/Password {data for new password}

等?

4

2 に答える 2

2

Q:RESTを使用してビジネスオブジェクトの操作を「呼び出す」ことはできますか?

A:はい、絶対にそうです。

GETまたはPUTを使用して任意のサーブレットで任意の操作を呼び出すことができるのと同様に、RESTフルWebサービスで任意の操作を呼び出すこともできます。

CRUD操作を含みますが、これに限定されません:)

于 2012-08-15T15:31:08.943 に答える
0

あなたが望むことをするためにいくつかのWebサービスを作成したいと思うでしょうが、私があなたの例を1つ挙げると:

Student.ChangePassword(password data)

そして、POSTリクエストがあります/ChangePassword/{student_id}/{password}

唯一の秘訣は、誰がこの関数を呼び出せるかを確認することです。セッション Cookie を使用してアクセスを制御していますか? それとも、ユーザー名/パスワードを渡してから新しいパスワードを渡すようにしていますか?

POST と PUT は、Web サーバーのログ ファイルに記録されないため、便利です。

于 2012-08-15T15:43:51.487 に答える