Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

JSONRPC をpython で体験する

RPC(リモートプロシージャコール)とはRESTと同じような、
特定フォーマットのHTTPリクエストを受け取り、レスポンスを返すプロトコルの一種です。
フォーマットには XML, JSON, protocol buffer, messagepack などあります。 最後の2つはバイナリフォーマットです。
最も簡単なjson-rpcを体験してみましょう。

環境: macOS

こちらのチュートリアルをそのまま使ってみます。

Quickstart — jsonrpc 1.10.8 documentation

pip というpython 用のパッケージマネージャー(rubyでいうところのbundle)はインストールされているものとします。

このチュートリアルで使われているパッケージをすべてインストールします。

$ pip install json-rpc
$ pip install werkzeug
$ pip install requests
$ pip install json-rpc
Collecting json-rpc
  Downloading json_rpc-1.10.8-py2.py3-none-any.whl (40kB)
    100% |████████████████████████████████| 40kB 371kB/s 
Installing collected packages: json-rpc
Successfully installed json-rpc-1.10.8
$ pip install werkzeug
Collecting werkzeug
  Downloading Werkzeug-0.14.1-py2.py3-none-any.whl (322kB)
    100% |████████████████████████████████| 327kB 1.3MB/s 
Installing collected packages: werkzeug
Successfully installed werkzeug-0.14.1
$ pip install requests
Collecting requests
  Downloading requests-2.18.4-py2.py3-none-any.whl (88kB)
    100% |████████████████████████████████| 92kB 946kB/s 
Collecting certifi>=2017.4.17 (from requests)
  Downloading certifi-2018.1.18-py2.py3-none-any.whl (151kB)
    100% |████████████████████████████████| 153kB 675kB/s 
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Downloading chardet-3.0.4-py2.py3-none-any.whl (133kB)
    100% |████████████████████████████████| 143kB 999kB/s 
Collecting urllib3<1.23,>=1.21.1 (from requests)
  Downloading urllib3-1.22-py2.py3-none-any.whl (132kB)
    100% |████████████████████████████████| 133kB 839kB/s 
Collecting idna<2.7,>=2.5 (from requests)
  Downloading idna-2.6-py2.py3-none-any.whl (56kB)
    100% |████████████████████████████████| 61kB 889kB/s 
Installing collected packages: certifi, chardet, urllib3, idna, requests
Successfully installed certifi-2018.1.18 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22

server.py client.py を作成し、実行します。

$ python server.py 
 * Running on http://localhost:4000/ (Press CTRL+C to quit)

これを実行します。

$ python client.py 

標準出力にechoされました。

127.0.0.1 - - [15/Feb/2018 20:35:32] "POST /jsonrpc HTTP/1.1" 200 -

参考: 【Python】RPCライブラリ・フレームワークまとめ - Qiita