我在做一个小测验。用户可以选择一个主题并回答5个问题。在每个问题之后,他们查看答案。我试图坚持这个工作流程的严格的RESTful表示,但不能真正确定url方案。例如:
用户Joe选择了主题sport,并准备好查看第一个问题。该url是
user/joe/subject/sport/question/1当他提交他的答案'B‘(这是一个多项选择测验)时,Joe正在创建一个新答案,我们将其发布到
user/joe/subject/sport/question/1/answer/B查看正确答案之前,请访问
user/joe/subject/sport/answer/1然后,我们查看下一个问题:
user/joe/subject/sport/question/2这一切显然都太复杂了。您将如何以RESTful方式处理此问题?
发布于 2012-02-28 06:46:02
从this presentation开始。这是一个很棒的RESTful应用编程接口设计资源。考虑到这一点,这里有一些开始的建议:
/subject/sport/question/1 /subject/sport/question/1/answer/B /subject/sport/answer/1 /subject/sport/question/2
subject部件添加的任何有用信息。该subject由(在您的示例中) sport标识。/sport/question/1 /sport/question/1/answer/B /sport/answer/1 /sport/question/2
/sports/questions/1 /sports/questions/1/answers/B /sports/answers/1Answers当你发布来回答一个问题时,你不能添加一个新的答案资源(也就是定义一个新的可能的答案)。/sports/ POSTing /1 /sports/answers/1 /sports/questions/1/sports/answers/1/sports/ answer你不是一个现有的resource?
这样做
发布于 2012-02-28 06:39:47
对我来说,REST服务的基本概念是“资源”。首先,您需要确定您的资源。
所以有一个用户,她开始了一个新的测验。
:
然后用户选择一个体育问题,因此您更新您的测验以包含一个随机(服务器选择的)问题。
用户回答:
现在冲洗一下,重复一遍。
我们所拥有的资源:
测验中user
发布于 2012-02-28 06:39:44
我会从路由中完全删除/user/joe。您可以使用Devise、Authlogic或其他身份验证框架获取current_user。
除此之外,这对我来说还可以,因为它只有两个可读的嵌套。所以你会有:
GET subjects/sports/questions/1
POST subjects/sports/questions/1 # pass along params with {:answer => 'B'}
GET subjects/sports/answers/1https://stackoverflow.com/questions/9473352
复制相似问题