我正在检查OpenERP-7.0和OpenERP-6.1中Web模块控制器中的文件。然后我发现6.1使用jsonrequest(@openerpweb.jsonrequest)7.0使用httprequest(@openerpweb.httprequest)。这两者有什么区别?
答案 0 :(得分:4)
我没有看OpenERP v7,但OpenERP v6.1同时使用了HttpRequest和JsonRequest。我想OpenERP v7也是一样的......
它们都是关于客户端和服务器之间的通信。 HttpRequest通过众所周知的GET和POST方法进行通信。这意味着以下内容:
JsonRequest是另一种用于客户端/服务器通信的协议的实现 - JSON-RPC 2.0。您可能希望从here获取更多信息。它是一个远程过程调用(RPC)协议,这意味着它允许客户端在服务器上启动某些方法的执行,并将一些参数传递给此方法。作为响应,客户端通过方法调用获取一些数据。
编辑 - 关于装饰者@ openerpweb.jsonrequest和@openerpweb.httprequest的更多话语
一些方法用@openerpweb.jsonrequest装饰器,其他方法装饰 - 使用@openerpweb.httprequest。这意味着除了第一组方法可以通过JSON RPC协议执行,第二组可以通过纯HTTP协议访问。
现在,有什么区别?我需要jsonrequest和httprequest吗?让我们像这样简化:JSON更适合在服务器上执行方法并获得结果。当我们访问服务器上的某些资源时,HTTP更简单,更容易使用。
为了清楚起见,让我们用一些例子“装饰”这个。看一下web.controllers.main.Export类的以下方法:
@openerpweb.jsonrequest
def formats(self, req):
""" Returns all valid export formats
:returns: for each export format, a pair of identifier and printable name
:rtype: [(str, str)]
"""
...
此方法接受一些参数并返回包含所有已知导出格式的列表(Python列表对象)。它将在客户端的某些python代码中以编程方式调用。
另一方面是'http'方法 - 就像web.controllers.main.Web类的方法css():
@openerpweb.httprequest
def css(self, req, mods=None):
....
所有这个方法都是将CSS文件返回给客户端。这是一个简单的操作,如访问图像,HTML网页或服务器上的任何其他资源。我们在这里返回的资源与上一个示例中的Python列表一样复杂。我们不需要特殊格式来对其进行编码。因此,我们不需要额外的数据编码格式作为JSON和远程过程调用协议作为JSON RPC。