jsonrequest和httprequest有什么区别?

Gop*_*N G 5 json http openerp

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

And*_*nov 5

我没有看 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。您可能需要查看此处了解更多信息。它是一个远程过程调用 (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)]
    """
    ...
Run Code Online (Sandbox Code Playgroud)

此方法接受一些参数并返回一个包含所有已知导出格式的列表(Python 列表对象)。它将在客户端的某些 python 代码中以编程方式调用。

另一方面是“http”方法——就像 web.controllers.main.Web 类的 css() 方法:

@openerpweb.httprequest
def css(self, req, mods=None):
    ....
Run Code Online (Sandbox Code Playgroud)

这个方法所做的就是将一个 CSS 文件返回给客户端。这是一个简单的操作,例如访问图像、HTML 网页或服务器上的任何其他资源。我们在此处返回的资源并不像前一个示例中的 Python 列表那样复杂。我们不需要特殊的格式来对其进行额外编码。所以我们不需要像JSON那样额外的数据编码格式和像JSON RPC那样的远程过程调用协议。