jsonrequest和httprequest有什么区别?

时间:2013-11-13 06:25:57

标签: json http openerp

我正在检查OpenERP-7.0和OpenERP-6.1中Web模块控制器中的文件。然后我发现6.1使用jsonrequest(@openerpweb.jsonrequest)7.0使用httprequest(@openerpweb.httprequest)。这两者有什么区别?

1 个答案:

答案 0 :(得分:4)

我没有看OpenERP v7,但OpenERP v6.1同时使用了HttpRequest和JsonRequest。我想OpenERP v7也是一样的......

它们都是关于客户端和服务器之间的通信。 HttpRequest通过众所周知的GET和POST方法进行通信。这意味着以下内容:

  • 客户端发送以url(GET方法)或http正文(POST方法)编码的请求
  • 服务器返回与请求对应的对象。可以是html页面,PNG图像,CSS文件,JavaScript,XML编码数据等等。

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。

相关问题