将RESTful设计应用于整个网站?


11

这一切可能都碰到了新事物,但是我正在努力设计一个完全RESTful的网站。我了解将RESTful设计应用于用户,照片,博客帖子等内容,因为我认为它们就像“对象”。

但是,关于“关于我们”页面呢。那是什么资源?从RESTful的意义上来说,它甚至是一种资源吗?另外,说我去URL“ http://www.example.com/”,我要什么资源?索引资源?


我认为需要澄清。您的最终目标是什么。宁静的设计需要什么。摆脱烦恼,您想满足什么需求?
乔纳森·考夫曼

1
最终目标是一个完整的网站。根据网络的工作方式,围绕宁静的设计构建网站似乎是有意义的。我只是不确定如何将这种设计应用于似乎不是资源的事物,例如“关于”或“联系”页面。
TaylorOtwell 2011年

Answers:


6

我看到的最常见的RESTful网站资源模式是将视图添加到URI:

/ resourcetype / 标识符 [/ view ] [/ page] [?filterparams]

如果没有视图,则只需提供默认视图即可。在您的情况下:

  • / —请求example.com返回顶级资源(您的网站)的默认视图
  • / aboutus-顶级资源的“关于我们”视图。或者,也aboutus可以是顶级CMS范围内资源的命名标识符。*
  • / customers / 1 / aboutus-此请求将指示范围为客户1的“关于我们”视图。

话虽这么说,有时最好稍微捏一些,以获得更好的语义。例如,StackOverflow使用RESTful / questions / [id]来提问,但是Ask Question页面是/ questions / ask,它不是非常RESTful(ask不是questions资源),但是使用凡人是很有意义的。


*在顶层的CMS中,资源类型经常(但并非总是)被删除,因为它是冗余的。


10

请记住,RESTful设计本身旨在提供一个标准,使Web可以统一编程。将整个面向人类的网站引入纯REST语义并不总是合适或有用。

当您拥有资源时,考虑它们的表示形式将很有用。考虑REST的其他设计原则(例如无状态)以及它们如何影响网站的性能和可用性也很重要。但是请记住,REST是一种工具,而不是目标。这是手段,而不是目的。

在了解RESTful语义和用途之后,在有用的地方使用RESTful语义,如果您的网站不是完全RESTful的,请不要费劲。无论如何,对于任何非平凡的站点来说几乎都是不可能的。

TL; DR:REST是一种工具。在有用的时间和位置使用它,但不受其约束。


2
+1除了URLS之外,还有更多值得休息的地方。
Josh Noe

Ajax,REST和到REST网站的外部链接可能是一场噩梦。谢谢您的回答。
约翰尼

4

但是,“关于我们”页面怎么样??那是什么资源?

复杂。具有组件,片段或结构的资源没有错。

资源不是“关系数据库行”或其他原子事物。他们是资源。

面向文档的数据库可以更优雅地处理此问题,因为资源可以更大,更结构化。

从RESTful的意义上来说,它甚至是一种资源吗?

是。

另外,说我去URL“ http://www.example.com/”,我要什么资源?

没有。

您正在请求“ aboutus”资源。资源可能是单例(但很奇怪)。没有ID而不是“列表”。

http://www.example.com/aboutus/?format=xml

返回包含很多部分的复杂XML文档。没有错。

索引资源?

在“ RESTful”意义上没有什么意义。“索引”页面适用于人们。使用RESTful API的应用程序旨在请求特定种类的资源。


4
+1我想从您的答案中提一个重要点:REST是一种可编程范例;它不一定要供人类食用。
Rein Henrichs

1

我会保持我的观点独立于后端。您可以向后端索取资源,例如手风琴上的东西,导航栏以及与主体有关的其他对象。但是,您应该将这些资源表示的处理留给客户端代码处理,这最终将根据需求呈现它们。


1

“关于我们”的资源是...我们:)呃,您。考虑一下要宣传的“您”的属性,然后将其汇总为带有表示形式的名词。

这些值不必来自数据库...它可能是一堆字符串值,它们可以来自config,甚至可以硬编码在类中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.