JsonRequest和HttpRequest有什么区别?

6

我在检查OpenERP-7.0和OpenERP-6.1的web模块控制器文件时发现,6.1使用jsonrequest (@openerpweb.jsonrequest),而7.0使用httprequest (@openerpweb.httprequest)。这两者之间有什么区别?


我不了解OpenERP,因此我无法给你答案,但是我可以给你一个建议:使用Fiddler检查通过网络传输的HTTP请求/响应。 - Rafa
1个回答

6
我没有看过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)]
    """
    ...

这个方法接受一些参数并返回一个包含所有已知导出格式的列表(Python列表对象)。它将在客户端的某些Python代码中以编程方式调用。
另一方面,还有“http”方法,例如web.controllers.main.Web类的css()方法:
@openerpweb.httprequest
def css(self, req, mods=None):
    ....

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

1
嗨,感谢您的回答。我知道jsonrequest和httprequest都是用于通信的。我需要知道装饰器@openerp.jsonrequest和@openerpweb.httprequest之间的区别,以及为什么两者都被使用? - OmaL
@OmaL:你好,我有一种更详细回答的感觉,但请查看我的响应中的编辑。 - Andrei Boyanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接