举个例子说明非RESTful设计?

时间:2010-10-08 09:04:22

标签: rest

我作为Rails开发人员学习了“RESTful”这个术语。阅读维基百科后,还herehere

我不明白。在我看来,Rails只使用简洁方式来描述URL。在我看来,每个URI都是RESTful,在它的设计范围

例如,我认为GET /delete?student_id=3在应用程序本身的范围内是RESTful

有人可以告诉我哪个收缩违反了吗?请参考REST definition中的收入。

4 个答案:

答案 0 :(得分:15)

GET请求应幂等,请求不应在服务器上留下任何副作用。引自HTTP spec sec 9.1.1

  

特别是,已经确定了GETHEAD方法不具有采取除检索之外的动作的重要性的约定。这些方法应该被认为是“安全的”。这允许用户代理以特殊方式表示其他方法,例如POSTPUTDELETE,以便让用户意识到可能不安全的操作是被要求。

因此GET /delete?student_id=3已违反GET动词的幂等性假设,因为它会删除服务器上的记录。

RESTful接口是一个统一的接口,换句话说,意味着GET应该按照HTTP规范的要求运行。这就是the spec says

  

GET方法意味着检索任何信息(以...的形式)      entity)由Request-URI标识。如果Request-URI引用      对于数据生成过程,它应该是生成的数据      作为响应中的实体而不是源文本返回      过程,除非该文本恰好是过程的输出。

     

...

答案 1 :(得分:7)

  

在我看来,Rails只使用了一个   描述URL的简洁方法。它似乎   在我看来,每个URI都是RESTful的   设计范围。

URI既不是RESTful也不是非RESTful。 REST是一种架构风格,您需要考虑整体应用程序。

GET是检索请求的方法。如果你想把它放在REST论文的上下文中,如果你的GET请求有副作用,那么它将破坏一些其他约束,例如关于缓存。

您还可以设计一个RESTful系统,其中GET /delete?student_id=3请求会告诉您(或要求您确认)您要删除该学生的表示,只要它不实际执行删除操作。

答案 2 :(得分:2)

GET应该是安全的RESTful,但显然与删除相结合它是不安全的。

所以它看起来很RESTful但不会表现出RESTful。所以它失败了duck test

答案 3 :(得分:2)

见5.1.5节。您的示例违反了统一接口约束。它通过违反HTTP规范来实现这一点。