JSON-RPC

Mock Server


これって何?


JSON-RPCのMockを用意するためのサーバ
自分で決めた結果を返すことができる。
エラーレスポンスも

どんな物なの?


簡単に言うと
http://www.mockable.io/
の JSON-RPC版

JSON-RPCって何?


RPCというが、昔のXMLのものより凄く単純なProtocol。
Request/Response 双方をJSONで行う。

このProtocol自体は送信経路については既定していない。
つまり、HTTPだけでなく、
TCP Socketの生データやWebSocket等上でも使える。

JSON-RPC の具体例


普通のRequest/Response

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

Errorの場合

 --> {"jsonrpc": "2.0", "method": "foobar", "id": "1"}
<-- {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "1"}

BatchRequestの場合

 --> [
        {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"},
        {"jsonrpc": "2.0", "method": "subtract", "params": [42,23], "id": "2"},
        {"jsonrpc": "2.0", "method": "foo.get", "params": {"name": "myself"}, "id": "5"},
        {"jsonrpc": "2.0", "method": "get_data", "id": "9"} 
    ]
<-- [
        {"jsonrpc": "2.0", "result": 7, "id": "1"},
        {"jsonrpc": "2.0", "result": 19, "id": "2"},
        {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "5"},
        {"jsonrpc": "2.0", "result": ["hello", 5], "id": "9"}
    ]

何で必要?


  • 実際のサーバの開発中に、ClientでAPIを叩きたい。
  • Client側でエラー時の動きを試したい。

そんな時にあって良かった Mock Server!

DEMO


Server: http://54.92.5.171/config
Client: jsonrpcClient.js

おまけ


JSON-RPCの実装に

npm の multitransport-jsonrpc を使っているが、

JSON-RPC2のSpecに対応していなかった。

仕方がないので必要な分だけpull requestを送って、
機能を追加しました。
https://github.com/uber/multitransport-jsonrpc/pulls/horiuchi?direction=desc&page=1&sort=created&state=closed

JSON-RPC Mock Server

By Hiroki Horiuchi