什么是REST,以及它的优点是什么?

4

我搜索了有关rest文档的信息,但我并不确定我完全理解它。

在rest中,我能看到的是其URL很简洁,例如:

http://host/webservice.asmx?name=xname&type=xtype

如果采用REST风格,可能是这样的:
http://host/webservice.asmx/xname/xtype

不是吗?

我刚刚发现URL更简洁,但我找不到其他的优点。

有人能告诉我更多吗?

我还有一些问题:

  1. 我发现一些基于Ruby-on-Rails构建的应用程序都使用干净的URL,例如:

    http://xxx/blog/list

    http://xxx/blog/edit/1

    http://xxx/blog/1

    它们之间是否有任何关系?

  2. URL重写

    URL重写是实现REST的一种方式吗?

  3. 我们有一些基于ASP.NET构建的Web服务,有没有办法将其改为REST架构?



更新:

我已经阅读了这篇文章(rest-to-my-wife),似乎使用http提供的动词(post/get/put/delete),我们可以使用相同的url对资源执行不同的操作,只需将相关数据放入http主体中; 例如,我想创建一个新订单:

POST http://www.store.com/order<purchase-order>
  <item> ... </item>
</purchase-order>

但我还有一些问题:

1)如何在页面中设置HTTP正文?

另一个例子,我想要删除一个订单:

删除http://www.store.com/order/1

但在页面中,URL只是一个链接,

可能是这样的:

删除此订单

它是静态的,我们如何告诉浏览器,在将此URL发送到服务器时,应该使用“删除”方式而不是“获取”方式?

2)这会导致服务器端额外的工作吗?

由于我们可能会使用不同的HTTP方法(GET / POST ...)向服务器发送相同的URL,因此服务器可能需要解析HTTP头和正文以确保用户希望对该URL执行什么操作(也许使用“资源”而不是“URL”更好,但我不能说明URL、URI和资源之间的区别)?

以同一URL为例:

http://www.store.com/order/1

如果服务器发现http方法是“get”,它可能会知道“哦,这个家伙只想获取id为1的订单信息”,如果方法是“delete”,它就知道“哦,这个家伙想删除id为1的订单”。因此,这种方式似乎将额外的工作从客户端转移到了服务器端。
我的意思是,在客户端中,URL都是相同的,这更容易,但对于服务器端而言,它需要更多的工作,这是真的吗?

REST与URL的清晰程度无关。在stackoverflow上有许多关于REST的常见问题。请在提问此类问题之前进行更多搜索。 - Darrel Miller
1个回答

1

HTTP本身就是REST的实现。URL的构建方式与此无关。REST是一种在每个请求中传递信息的方式,而不是拥有永久开放的连接。


1
实际上那并不完全正确。HTTP可以以RESTful的方式使用,也可以以非RESTful的方式使用。 - Darrel Miller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接