我正在开发一项网络服务,我正在尝试决定是否将其设为RESTful。我发现丢失了有关REST的信息,但没有发现它为什么有用的信息。
特别是我很困惑,因为看起来使用RESTful方法很难通过客户端网页与服务进行交互,因为你必须使用AJAX来提交除GET / POST查询之外的任何内容,以及你的服务生活在不同的服务器上,因为相同的原始政策,它几乎不可能。
任何人都可以告诉我这通常是如何做的以及REST为您提供的简单RPC API之类的好处是什么?
答案 0 :(得分:0)
现代浏览器(符合HTML5)支持所有适当的HTTP谓词(GET,PUT,POST,DELETE)。为了处理相同的源策略问题,您始终可以在服务器上公开端点以隧道连接到外部服务器。
从REST获得的好处来自(IMO)数据模型表示为资源,而不是服务。特别是,数据模型元素的表示可以利用HTTP缓存机制。同样,使用代表性模型可以强制对您的数据模型进行设计时评估(根据我的经验)证明非常有用。
答案 1 :(得分:0)
1) 为何选择REST:
想想MVC模式。
如果您有相同内容的多个视图,则模型 - 视图分离尤其有意义。
现在通过易于实现的特定于应用程序的协议将REST视为一个机器友好的视图。使您的应用程序对于希望将您的应用程序作为Web服务集成到自己的应用程序中的其他开发人员也很有用。
REST是一种应用程序集成技术。
如果您想为您的应用程序提供机器和开发人员友好的Web服务API,那么REST是一个不错的选择。
2) REST与RPC REST应该按照无状态的方式实现。 RPC调用是对对象或会话变量的远程方法调用,这使得RPC API有状态并且在许多情况下更加昂贵。
3) 不同的REST样式 REST的问题是,在常见的HTTP方法GET,POST,PUT,DELETE,OPTIONS上映射对象的所有操作并不总是很容易。
显然,可以通过将4个CRUD操作分配给GET,POST,PUT,DELETE方法来实现CRUD。
但是你也可以在POST方法的HTTP体内编纂那种操作,这就是做REST的简约GET,POST风格。
问题不是所有HTTP客户端都可以发送PUT请求。
CRUD样式服务提倡的解决方案是通过使用特殊HTTP标头注释POST请求来模拟PUT请求: X-HTTP-Method-Override:PUT
但这并没有解决它,因为一些奇特的防火墙会删除这个非标准的HTTP标头。
创建RESTful API一词的Roy Fielding也提到他认为用GET和POST设计完美的RESTful系统是可能的。4) 将REST添加到现有MVC Web应用程序至少需要实现额外的RESTful控制器,该控制器将HTTP方法谓词PUT,POST,DELETE转换为对请求URI标识的模型对象的操作,但通常还要实现更多的机器 - 友好的观点(JSON,XML,...)。