我正在设计一个安静的服务来支持一个现有的向导,它允许用户提交一个新资源(让我们称之为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
count
(可能是第二个问题,虽然是相关的):拥有一个不一定出现在主集合上的集合风格资源的子属性是否很奇怪?我想这样做以支持分页视图...
http://www.somewhere.com/customers/count (GET)