考虑这样的场景,一个未知的未经身份验证的用户正在查看 nerddinners 列表,然后去参加特定的晚餐,输入他的姓名和电子邮件并单击“参加”。这应该导致两件事。创建用户并为该用户创建 DinnerAttendRequest。用户还有一个名为 FavProgLanguage 的属性,该属性设置为他想参加的晚餐的 prog 语言属性。
假设它是一个与 API 对话的单页 javascript 应用程序,我想到了两种方法。
1) 在客户端上,设置用户 FavProgLanguage,然后使用名称、电子邮件和 favproglanguage POST 到 /user 以创建用户。使用创建的 UserId 和 POST 到 /DinnerAttendRequest 以及 DinnerId 和 UserId 来创建 DinnerAttendRequest。
2) 使用名称、电子邮件和晚餐ID POST 到/somename,然后在服务器上使用晚餐ID 来填充用户的favproglanguage。创建用户,然后使用用户 ID 创建 DinnerAttendRequest
第一种方法看起来更自然/RESTful,但是如果计算 favprog 语言的逻辑有点复杂,所有 api 使用者都必须实现该逻辑,而第二种方法代码只在服务器上编写一次。
哪种方法更好?第二种方法是 RESTful 的吗?