2011-07-07 99 views
3

我正在研究Web服务,我正在尝试决定是否使其成为RESTful。我发现关于REST的信息丢失了,但没有多少关于它为什么有用的信息。通过网页与RESTful API交互?

特别是我很困惑,因为它似乎使用RESTful方法使得通过客户端网页与服务交互非常困难,因为您必须使用AJAX提交除GET/POST查询以外的任何内容,并且如果您的服务存在于不同的服务器上,那么由于相同的原始策略,这几乎是不可能的。

任何人都可以填写我通常如何做到这一点,以及REST为您提供什么好处,例如简单的RPC API?

+0

此信息应该很有用:http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers –

回答

0

现代浏览器(兼容HTML5)支持所有适当的HTTP动词(GET,PUT,POST,DELETE)。为了处理相同的原始策略问题,您可以始终在您的服务器上公开端点以连接到外部服务器。

从REST获得的好处来自于您的数据模型表示形式的资源,而不是服务。特别是,数据模型元素的表示可以利用HTTP缓存机制。同样,使用表示模型可以强制对您的数据模型进行设计时评估(根据我的经验)证明非常有用。

0

1) 为什么REST:

试想MVC模式。

如果您有多个相同内容的视图,模型 - 视图分离尤其有意义。

现在通过易于实现的特定于应用程序的协议将REST看作是一种机器友好的视图。让您的应用程序对希望将应用程序作为Web服务集成到自己的应用程序中的其他开发人员也有用。

REST是一种应用程序集成技术。

如果您想为您的应用程序提供机器和开发人员友好的Web服务API,那么REST是一个不错的选择。

2) REST vs RPC REST应该按照无状态的方式实现每个定义。 RPC调用是对对象或会话变量的远程方法调用,这会使RPC API处于有状态,并且在许多情况下更昂贵。

3) 不同REST风格 与REST的问题是,它并不总是很容易为对象的所有操作地图上常见的HTTP方法GET,POST,PUT,DELETE,OPTIONS。

显然CRUD可以通过将4个CRUD操作分配给GET,POST,PUT,DELETE方法来实现。

但是你也可以在POST方法的HTTP主体中编写这种操作,这是做REST的简约GET,POST风格。

问题并非所有的HTTP客户端都可以发送PUT请求。

由CRUD式的服务倡导的解决方案是通过注释POST请求有一个特殊的HTTP标头以模拟PUT请求: X-HTTP-方法 - 替换:PUT

但是,这并不能解决问题,因为一些外来的防火墙删除了这个非标准的HTTP头。

Roy Fielding创造了RESTful API这个术语,他还提到他认为用GET和POST设计一个完美的RESTful系统是完全可能的。

4) 将REST添加到现有的MVC Web应用程序中需要至少实现一个额外的RESTful控制器,该控制器将HTTP方法转换为由请求URI标识的模型对象上的PUT,POST,DELETE动作,实现更加机器友好的视图(JSON,XML,...)。