`
bugyun
  • 浏览: 559111 次
社区版块
存档分类
最新评论

Web服务实现方案四:JSON-RPC简介

 
阅读更多

 

参考:https://zh.wikipedia.org/wiki/XML-RPC

 

JSON-RPC是一种远程过程调用 协议中的编码JSON。这是一个非常简单的协议,(非常类似于XML-RPC),只定义数据类型和命令的屈指可数。JSON-RPC允许通知(发送到不需要响应的服务器数据)和用于多个呼叫将被发送到可被回答无序服务器。

 

历史

版 描述 过时的
1.0 蓝本 2005年
1.1 WD 工作草案增加了命名参数,增加了特定的错误代码,并添加了内省功能。 2006-08-07
1.1 Alt键 建议一个简单的JSON-RPC 1.1替代建议1.1 WD。 2007-05-06
1.1对象规格 对象规范替代建议1.1 WD / 1.1ALT。 2007-07-30
1.2 建议本文档的修订后更名为2.0。 2007-12-27
2.0 建议规范 2009-05-24
2.0(Revised-) 规范 2010-03-26

使用

JSON-RPC的工作原理是发送给实施这一协议的服务器发送请求。在这种情况下,客户机通常是软件意图调用远程系统的一个方法。多个输入参数可以被传递到作为数组或对象的远程方法,而该方法本身可以返回多个输出数据为好。(这取决于所实现的版本)。

远程方法是通过使用发送请求到远程服务调用HTTPTCP / IP的套接字(从2.0版)。当使用HTTP,所述内容类型可以被定义为应用/ JSON[1]

所有的传输类型的单个对象,使用JSON序列化。[2]请求是由远程系统所提供的特定方法的调用。它必须包含三个特定的属性:

  • 方法 -该方法的名称的字符串被调用。
  • PARAMS -对象的数组作为参数来定义的方法传递。
  • 编号 -的任何类型的,它被用来以匹配它答复请求的响应的值。

请求的接收器必须对所有接收到的请求的有效响应回复。的响应必须包含以下提到的属性。

  • 结果 -通过调用方法返回的数据。如果在调用方法时发生错误,则此值必须为空。
  • 错误 -如果在调用方法的错误,否则指定的错误代码
  • 编号 -这是响应请求的ID。

由于有在需要甚至期望没有反应的情况下,被引入的通知。通知是类似于除了ID,这是不是必要的,因为没有任何反应会返回一个请求。在这种情况下的id属性应被删去(版本2.0)或为(1.0版)。

 

Examples

In these examples, --> denotes data sent to a service (request), while <-- denotes data coming from a service. (Although <-- often is called response in client–server computing, depending on the JSON-RPC version it does not necessarily imply answer to a request).

Version 1.0

A simple request and response:

--> {"method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
<-- {"result": "Hello JSON-RPC", "error": null, "id": 1}

This example shows parts of a communication from an example chat application. The chat service sends notifications for each chat message the client peer should receive. The client peer sends requests to post messages to the chat and expects a positive reply to know the message has been posted.

...
--> {"method": "postMessage", "params": ["Hello all!"], "id": 99}
<-- {"result": 1, "error": null, "id": 99}
<-- {"method": "handleMessage", "params": ["user1", "we were just talking"], "id": null}
<-- {"method": "handleMessage", "params": ["user3", "sorry, gotta go now, ttyl"], "id": null}
--> {"method": "postMessage", "params": ["I have a question:"], "id": 101}
<-- {"method": "userLeft", "params": ["user3"], "id": null}
<-- {"result": 1, "error": null, "id": 101}
...

Because params field is an array of objects, the following format is also ok:

{
    "method": "methodnamehere",
    "params": [
        {
            "firstparam": "this contains information of the firstparam.",
            "secondparam": 1121211234,
            "thirdparam": "this contains information of the thirdparam."
        },
        {
            "fourthparam": "this is already a different object.",
            "secondparam": "there can be same name fields in different objects.",
            "thirdparam": "this contains information of the thirdparam."
        }
    ],
    "id": 1234
}

Version 1.1 (Working Draft)

The format of the contents of a request might be something like that shown below:

{
    "version": "1.1",
    "method": "confirmFruitPurchase",
    "id": "194521489",
    "params": [
        ["apple", "orange", "mangoes"],
        1.123
    ]
}

The format of a response might be something like this:

{
    "version": "1.1",
    "result": "done",
    "error": null,
    "id": "194521489"
}

Version 2.0

Procedure call with positional parameters:

--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
<-- {"jsonrpc": "2.0", "result": 19, "id": 1}
--> {"jsonrpc": "2.0", "method": "subtract", "params": [23, 42], "id": 2}
<-- {"jsonrpc": "2.0", "result": -19, "id": 2}

Procedure call with named parameters:

--> {"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3}
<-- {"jsonrpc": "2.0", "result": 19, "id": 3}
--> {"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 4}
<-- {"jsonrpc": "2.0", "result": 19, "id": 4}

Notification:

--> {"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}
--> {"jsonrpc": "2.0", "method": "foobar"}

Procedure call of non-existent procedure:

--> {"jsonrpc": "2.0", "method": "foobar", "id": 10}
<-- {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Procedure not found."}, "id": 10}

Procedure call with invalid JSON:

--> {"jsonrpc": "2.0", "method": "foobar", "params": "bar", "baz"]
<-- {"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}

Procedure call with invalid JSON-RPC:

--> [1,2,3]
<-- [
  {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},
  {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},
  {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}
]
--> {"jsonrpc": "2.0", "method": 1, "params": "bar"}
<-- {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}
分享到:
评论

相关推荐

    jsonrpc-frontend:前端应用程序发送 json-rpc 请求进行测试

    描述中的"jsonrpc-frontend:前端应用程序发送 json-rpc 请求进行测试"进一步确认了这个项目是针对前端应用的JSON-RPC测试解决方案。这意味着它可能提供了一个简洁的API,使得前端开发者可以轻松构建和发送JSON-RPC...

    json-rpc-java-1.0.zip

    2. **实现服务**:实现服务接口,提供具体业务逻辑。 3. **启动服务器**:使用JSON-RPC服务器框架注册服务接口的实现,并监听特定端口。 4. **编写客户端**:创建JSON-RPC客户端实例,设置服务器地址,然后调用服务...

    json-rpc-java-talk-20050225.pdf

    ### JSON-RPC-Java在构建下一代Web应用中的应用 ...特别是通过使用`XMLHttpRequest`对象以及JSON-RPC-Java库,能够在不刷新页面的情况下实现实时数据更新,使Web应用更接近于桌面应用的性能和体验。

    利用JSON-RPC-Java构建下一代Web应用程序

    通过本文的介绍,我们可以看到JSON-RPC-Java为构建下一代Web应用程序提供了一种强大而灵活的技术解决方案。它不仅解决了数据序列化与反序列化的难题,还大大提升了Web应用的交互性和性能。随着技术的不断发展和完善...

    JSON.rar_JSON_JSON-RPC.jar_jsonRPC.J

    在"jsonrpc.j"文件中,可能包含了JSON-RPC的相关代码示例或者API接口定义,这对于理解和使用JSON-RPC协议至关重要。 在学习和使用JSON时,你需要了解JSON的语法规则,例如如何定义对象和数组,字符串的表示方式,...

    JSON-RPC for Java使用说明.doc

    由于JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,因此,基于JSON的RPC协议成为一种理想的解决方案。 **应用前景和展望** 随着Web应用复杂性的...

    Json-RPC_for_Java使用说明

    - **Web.xml配置**:在部署项目前,需在`web.xml`中配置相关的Servlet和监听器,以启用JSON-RPC_for_Java框架。 - **引入Jar包**:将框架的jar文件添加到项目的类路径中,确保所有依赖项正确加载。 - **AJAX服务Java...

    Silverlight通过json-rpc交互数据

    在Silverlight中,json-rpc通常通过WCF(Windows Communication Foundation)服务实现。WCF提供了一种统一的编程模型,可以方便地实现各种通信协议,包括基于JSON的json-rpc。 1. **配置WCF服务**:首先,我们需要...

    Json-RPC for java中文手册

    `json-rpc-for-java`框架以其轻量级、易用性及强大的功能(如支持级联调用和异步复合对象传递)成为了一种非常实用的技术解决方案。无论是对于前端开发者还是后端开发者来说,掌握这个框架都能显著提升Web应用的开发...

    使用jsonrpc

    总之,JSON-RPC是现代Web开发中一种重要的通信协议,结合JavaScript库如`jsonrpc.js`,可以方便地实现高效、灵活的远程调用。通过理解其基本原理和使用方法,开发者可以更好地构建和维护分布式系统和服务。

    DelphiMVC框架

    DMVCFramework,作为一个专门为Delphi开发者设计的WEB API框架,旨在简化和加速RESTful以及JSON-RPC服务的构建。它在Delphi社区中备受推崇,因其强大功能和易用性而广受欢迎。在深入探讨DMVCFramework之前,我们首先...

    json.rar_Soap To json_java webservice json_json rpc SOAP_json we

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务中的数据传输。它以文本形式存储和交换数据,易于人阅读和编写,同时也易于机器解析和生成。JSON格式与JavaScript语法紧密相关,...

    moesif-ethereum-js-example:基于web3jsethereum构建的Dapp的示例,并使用Moesif监视JSON-RPC调用

    允许您的Dapp使用JSON-RPC与以太坊网络(及其上部署的智能合约)进行交互。 在我们的示例中,我们使用Truffle框架,该框架是用于简化某些过程并生成样板代码的工具集。 主题背景 Moesif是领先的API分析和监视平台,...

    XML-RPC 实现C++和C#交互.pdf

    【XML-RPC 实现C++和C#交互】 XML-RPC(XML Remote Procedure Call)是一种简单、跨平台的远程过程调用协议,它利用HTTP作为传输协议,XML作为数据编码方式,使得不同编程语言编写的程序能够进行通信。在本文中,...

    delphimvcframework:DMVCFramework(简称VC)是Delphi中流行的,功能强大的Web解决方案框架。 支持RESTful和JSON-RPC API开发

    lithium的新增功能2.1.2-氦气中的新增功能氢2.1.1的新功能路线图培训,咨询或定制开发服务样品和文件入门:5分钟指南DelphiMVCFramework安装样品控制器如何创建dmvcframework服务器容器RQL简介由DMVCFramework实现的...

    Python网络编程中的远程调用研究.zip

    Python的`jsonrpc`库(如`jsonrpclib`或`SimpleJSON-RPC`)可以帮助我们创建JSON-RPC服务和客户端。 3. gRPC: gRPC是由Google开发的一种高性能、开源的RPC框架,它基于HTTP/2协议,使用Protocol Buffers作为数据...

    PHPHessian 开源源码

    PHPHessian的jsonrpc实现版本将Hessian的高效二进制传输与JSON-RPC的灵活远程调用机制相结合,提供了一种高效的跨语言服务调用方案。 **PHPHessian的结构和功能** 在`hessianphp-master`压缩包中,我们可以看到...

    jsonrpc.js:没有 jquery 的简单 jsonrpc 2.0

    JSONRPC.js 是一个轻量级的JavaScript库,专注于实现JSON-RPC 2.0协议,无需依赖jQuery。JSON-RPC是一种远程过程调用(RPC)的...对于需要跨域调用服务或者构建RESTful API的Web应用,JSONRPC.js是一个值得考虑的工具。

    Electron-RPC:简单的用户界面,可控制您的丰富状态

    4. **数据序列化与反序列化**:RPC 调用涉及的数据需要在进程间传输,因此 Electron-RPC 使用 JSON 或其他序列化格式进行数据编码和解码,确保数据在不同环境下的兼容性。 **Electron-RPC 的应用场景** - **状态...

Global site tag (gtag.js) - Google Analytics