首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RESTful测验表示

RESTful测验表示
EN

Stack Overflow用户
提问于 2012-02-28 06:27:32
回答 3查看 284关注 0票数 3

我在做一个小测验。用户可以选择一个主题并回答5个问题。在每个问题之后,他们查看答案。我试图坚持这个工作流程的严格的RESTful表示,但不能真正确定url方案。例如:

用户Joe选择了主题sport,并准备好查看第一个问题。该url是

代码语言:javascript
复制
user/joe/subject/sport/question/1

当他提交他的答案'B‘(这是一个多项选择测验)时,Joe正在创建一个新答案,我们将其发布到

代码语言:javascript
复制
user/joe/subject/sport/question/1/answer/B

查看正确答案之前,请访问

代码语言:javascript
复制
user/joe/subject/sport/answer/1

然后,我们查看下一个问题:

代码语言:javascript
复制
user/joe/subject/sport/question/2

这一切显然都太复杂了。您将如何以RESTful方式处理此问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-28 06:46:02

this presentation开始。这是一个很棒的RESTful应用编程接口设计资源。考虑到这一点,这里有一些开始的建议:

  1. RESTful URL具有隐式层次结构。从URL中取出用户信息。它属于HTTP标头。

/subject/sport/question/1 /subject/sport/question/1/answer/B /subject/sport/answer/1 /subject/sport/question/2

  • I看不到subject部件添加的任何有用信息。该subject由(在您的示例中) sport标识。

/sport/question/1 /sport/question/1/answer/B /sport/answer/1 /sport/question/2

  • Categories应该是复数。

/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?

  • You的POSTing没有提到任何关于HATEOAS的事情。如果您真的要实现REST,就应该像providing "next" links

这样做

票数 1
EN

Stack Overflow用户

发布于 2012-02-28 06:39:47

对我来说,REST服务的基本概念是“资源”。首先,您需要确定您的资源。

所以有一个用户,她开始了一个新的测验。

  • POST /user/joe/QUZ.返回位置: /user/joe/quiz/1

然后用户选择一个体育问题,因此您更新您的测验以包含一个随机(服务器选择的)问题。

  • POST /user/joe/ -> /1->主题:
    • It returns:位置:sport

用户回答:

  • PUT /user/joe/quiz/1/ -> /1-> Answer B

现在冲洗一下,重复一遍。

我们所拥有的资源:

测验中user

  • Questions的
  • Users
  • Quiz (使用答案更新问题)
票数 1
EN

Stack Overflow用户

发布于 2012-02-28 06:39:44

我会从路由中完全删除/user/joe。您可以使用Devise、Authlogic或其他身份验证框架获取current_user。

除此之外,这对我来说还可以,因为它只有两个可读的嵌套。所以你会有:

代码语言:javascript
复制
GET subjects/sports/questions/1
POST subjects/sports/questions/1 # pass along params with {:answer => 'B'}
GET subjects/sports/answers/1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9473352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档