私は、ユーザーが新しいリソースを送信できるようにする既存のウィザードをサポートするための安らかなサービスの設計に取り組んでいます (それを呼び出すことができますcustomer
)。
このウィザードは、ユーザーが送信するページごとに検証を行いますが、ユーザーが送信しているページに対してのみ検証を行います。ユーザーが最終処理のために顧客を送信することを選択した場合にのみ、オブジェクト全体に対して完全な検証パスが実行されます。
ウィザードを簡素化し、さらにフィールドを追加するときにメンテナンス リリースで UI をシャッフルできるようにするために、ウィザードの構造をリソースに体系化していません。顧客は、ウィザードがデータを提示する方法で「ロールアップ」しません。
リソースの名前付きサブドキュメントが必ずしもそのリソースの完全なドキュメントに階層的に表示されない (または少なくとも同じ方法ではない) ように RESTful サービスを設計するのは奇妙ですか?
私のウィザードページが次のとおりだったとします。
- 連絡先
- 食べ物の好み
- 恐れのリスト
次に、顧客オブジェクトの例を示します。
// Note that the wizard page groupings don't show up explicitly
{
customer: {
firstName: "Pilsner",
lastName: "Dopplebock",
emailAddress: "nextguest@hotelcalifornia.com",
addressLine1: "123 Fleece Place",
addressLine2: ""
town: "Ibinjad",
region: "North Dakota",
postalCode: "12123",
homePhoneNumber: "2123234124",
faxPhoneNumber: null,
meatPreference: "well-done",
allergies: "shellfish",
fears: [
"banshees",
"baths",
"sleeveless shirts"
]
}
}
リソースのベース URL を次のようにします。
http://www.somewhere.com/customers
http://www.somewhere.com/customers/{id}
以下の安らかな URL/メソッドを作成するのは奇妙でしょうか、それとも間違っていますcustomer
か?
http://www.somewhere.com/customers/contactinformation (POST)
http://www.somewhere.com/customers/{id}/contactinformation (POST, or PUT for update? maybe GET)
http://www.somewhere.com/customers/{id}/foodpreference (POST, or PUT for update?, maybe GET)
http://www.somewhere.com/customers/{id}/fears (POST to add a single item?, maybe PUT for a batch?, maybe GET)
リソース全体を一度に取得できない場合は、別のウィザード URL を使用することを検討しましたが、私の意見では、これは適切にリソース指向ではないようです。
http://www.somewhere.com/customerwizard/submitcontactinformation (POST)
http://www.somewhere.com/customerwizard/{customer-id}/submitcontactinformation
http://www.somewhere.com/customerwizard/{customer-id}/submitfoodpreference
http://www.somewhere.com/customerwizard/{customer-id}/fears
(関連しているかもしれませんが、おそらく 2 番目の質問):count
メイン コレクションに必ずしも表示されないコレクション スタイルのリソースのサブプロパティがあるのは奇妙ですか? ページ分割されたビューをサポートするためにこれを行いたい...
http://www.somewhere.com/customers/count (GET)