json - jsonrequest 和 httprequest 有什么区别?

标签 json http openerp

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

最佳答案

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

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

  • 客户端发送一个编码在 url(GET 方法)或 http body(POST 方法)中的请求
  • 服务器返回一个与请求对应的对象。可以是 html 页面、PNG 图像、CSS 文件、JavaScript、XML 编码数据或其他任何内容。

JsonRequest 是另一种客户端/服务器通信协议(protocol)的实现 - JSON-RPC 2.0。你可能想看看 here了解更多信息。它是一个远程过程调用 (RPC) 协议(protocol),这意味着它允许客户端通过向该方法传递一些参数来启动服务器上某个方法的执行。作为响应,客户端作为方法调用的结果获取一些数据。

编辑 - 关于装饰器 @openerpweb.jsonrequest 和 @openerpweb.httprequest 的更多说明

某些方法使用@openerpweb.jsonrequest 装饰器进行装饰,其他方法使用@openerpweb.httprequest。这意味着第一组方法可以通过 JSON RPC 协议(protocol)执行,第二组方法可以通过纯 HTTP 协议(protocol)访问。

现在,有什么区别?我们是否同时需要 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和远程过程调用协议(protocol)如JSON RPC。

关于json - jsonrequest 和 httprequest 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19946860/

相关文章:

c# - 从 MVC 4 C# Controller 测试 JSON 结果

json - Spring 网页 : @RequestBody Json conversion for Java8 LocalTime not working

c# - 将 Json 对象转换为实体

http - HTTP TRACE请求有body怎么办?

http - 我可以更改我所有的 http ://links to just//?

openerp - 如何使用新 API 为 many2many 字段正确创建、写入或取消链接记录?

javascript - 来自外部 json 文件的 D3js 条形图

.net - 将 HTTP/1.0 与 .NET HttpListener 类一起使用 - 或 - 禁用范围请求

openerp - 从按钮或菜单打开特定对象

html - 如何使用上传按钮在 Odoo 中嵌入 Youtube 链接?