LoginSignup
39
36

More than 5 years have passed since last update.

なんとなくわかる JSONRPC 2.0

Last updated at Posted at 2016-03-29

基本的な動き

  • リクエスト

下記のような形式で実行します。実行するときは必ずPOSTになるみたいです。

要求
{
  "jsonrpc": "2.0",      // 固定で設定する
  "method": "login",     // 実行するメソッド名を記載
  "params":              // Postパラメータを設定
    {
      "user_id": "wanwan" 
      "password": "nyannyan"  
    },
  "id": 3                // 実行に対する番号
}

  • レスポンス

下記みたいな感じになります。つまり、ID:3でAPIを実行したら、それはID:3で帰ってくるというようなもののようです。

応答
{
  "jsonrpc": "2.0",  // 固定
  "result": {        // レスポンス
    "name" : "犬のおまわりさん",
    "message" : "困ってしまってニャンニャンニャニャン"
  },
  "id": 3            // 実行に対する番号
}

エラーのときは下記のような感じになります。

エラー応答
{
  "jsonrpc": "2.0",                   // 固定
  "error": {                          // エラーのレスポンス
      "code": -32601,                 // エラーコード
      "message": "Method not found"   // メッセージ
  }, 
  "id": "3"                           // 実行に対する番号
}

エラーコード

HTTPステータスは200となるようです。

コード メッセージ 内容
-32700 Parse error Jsonの解析エラー
-32600 Invalid Request 送られた内容がJSONRPC形式ではない
-32601 Method not found メソッドがない、メソッド名が間違ってる
-32602 Invalid params パラメーターが間違ってる
-32603 Internal error 何か例外が発生した

特別な機能

Batch

Batchというのは、下記のような形でまとめてAPIを実行してまとめて、レスポンスを返してもらうことができる機能です。

まとめて実行してもIDがあるから、判別可能です。

  • リクエスト
バッチ要求
[
    {
        "jsonrpc": "2.0", 
        "method": "hello", 
        "params": {
            "user_id" : "wanwan",
            "word" : "こんにちわ"
        },
        "id": "1"
    }, 
    {
        "jsonrpc": "2.0", 
        "method": "bye", 
        "params": [
            "user_id" : "booboo",
            "word" : "バイバイ"
        ],
        "id": "2"
    }
]
  • レスポンス
バッチ応答
[
    {
        "jsonrpc": "2.0", 
        "result": {
           "user_id" : "dondon",
           "message" : "わんわんわん"
        },
        "id": "1"
    }, 
    {
        "jsonrpc": "2.0", 
        "result": {
           "user_id" : "googoo",
           "message" : "ブーブー"
         },
        "id": "2"
    }
]

Notification

パラメータにidを設定しない場合、Notificationになります。
Notificationで実行すると、レスポンスを返さないようになります。

こんなもの何に使うのかと思ったのですが、updateとかだと要らないのかもしれないです。
エラーのときは帰ってきます。

  • リクエスト
通知要求
{
  "jsonrpc": "2.0",
  "method": " update",
  "params":
    {
      "user_id": "wanwan" ,
      "mail": "nyannyan@gmail.com"  
    }
}

  • レスポンス(エラーの時)
通知応答
{
    "jsonrpc": "2.0",
    "error": {
        "code": -32603, 
        "message": "Internal error"
    }, 
    "id": null
}

参考

39
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
36