通过网页与RESTful API交互?

通过网页与RESTful API交互?,rest,Rest,我正在开发一个web服务,我正在尝试决定是否使其成为RESTful。我发现关于REST是什么的信息丢失了很多,但关于它为什么有用的信息却不多 我尤其感到困惑,因为使用RESTful方法似乎很难通过客户端网页与服务交互,因为您必须使用AJAX来提交GET/POST查询以外的任何内容,而且如果您的服务位于不同的服务器上,那么由于同源策略,这几乎是不可能的 有人能告诉我这通常是如何实现的,REST比简单的RPC API有什么好处吗?现代浏览器(兼容HTML5)支持所有适当的HTTP动词(GET、PUT

我正在开发一个web服务,我正在尝试决定是否使其成为RESTful。我发现关于REST是什么的信息丢失了很多,但关于它为什么有用的信息却不多

我尤其感到困惑,因为使用RESTful方法似乎很难通过客户端网页与服务交互,因为您必须使用AJAX来提交GET/POST查询以外的任何内容,而且如果您的服务位于不同的服务器上,那么由于同源策略,这几乎是不可能的

有人能告诉我这通常是如何实现的,REST比简单的RPC API有什么好处吗?

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

REST的好处来自(IMO)将数据模型表示为资源,而不是服务。特别是,数据模型元素的表示可以利用HTTP缓存机制。同样,使用代表性模型可以强制对数据模型进行设计时评估(以我的经验来看),这是非常有用的

1) 为什么休息:

想想MVC模式吧

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

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

REST是一种应用集成技术

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

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

(三) 不同的休息方式 REST的问题在于,在通用HTTP方法GET、POST、PUT、DELETE和OPTIONS上映射对象的所有操作并不总是那么容易

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

但是您也可以在POST方法的HTTP主体中编写这种操作,这是一种简化的GET、POST风格的REST操作

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

CRUD风格服务提倡的解决方案是通过使用特殊的HTTP头注释POST请求来模拟PUT请求: X-HTTP-Method-Override:PUT

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

罗伊·菲尔丁(Roy Fielding)是RESTful API的创始人,他还提到,他认为用just GET和POST设计一个完美的RESTful系统是完全可能的

(四)
向现有MVC web应用程序添加REST至少需要实现一个额外的RESTful控制器,该控制器将HTTP方法动词PUT、POST、DELETE转换为对请求URI标识的模型对象的操作,但通常还需要实现更为机器友好的视图(JSON、XML等)

这些信息应该有用: