我作为Rails开发人员学习了“RESTful”这个术语。阅读维基百科后,还here和here。
我不明白。在我看来,Rails只使用简洁方式来描述URL。在我看来,每个URI都是RESTful,在它的设计范围。
例如,我认为GET /delete?student_id=3
在应用程序本身的范围内是RESTful 。
有人可以告诉我哪个收缩违反了吗?请参考REST definition中的收入。
答案 0 :(得分:15)
GET
请求应幂等,请求不应在服务器上留下任何副作用。引自HTTP spec sec 9.1.1:
特别是,已经确定了
GET
和HEAD
方法不具有采取除检索之外的动作的重要性的约定。这些方法应该被认为是“安全的”。这允许用户代理以特殊方式表示其他方法,例如POST
,PUT
和DELETE
,以便让用户意识到可能不安全的操作是被要求。
因此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规范来实现这一点。