2010-11-20 6 views
1

JSON-RPCが手続き型のため、JSON-RPCにマップされないAPIをC#で使用しています。 JSON-RPCではオブジェクト指向のAPIをどのように表現しますか?
要求は次のようになりますように、私はもちろん、JSON-RPCの拡張機能を使用することができますJSON-RPCでオブジェクト指向APIにアプローチする方法は?

{ "jsonrpc":"2.0", method:"ObjectName.Method", "params":[], "id": 1 } 

しかし、それはちょっとハック感じているとも定義するために多くの作業が必要です。 私はそれをパラメータとして含めることもできますが、もう一度それはちょうどいい気分にはなりません。
JSON-RPCを使用してオブジェクト指向APIを使用することに関するベストプラクティスはありますか?

答えて

4

JSON-RPCはJSONリモートです。手順デフォルトでは、プロシージャ指向で呼び出します。

しかし、HTTPで作業する場合、各RPCサービスをオブジェクトとして見ることができます。私。 /foo/barにアクセスし、HTTP経由でJSON-RPC経由でbeepとコールした場合はメソッドをfooサービスbarオブジェクトと呼びます。

そうでなければ、あなたがそれを行う可能性のあるすべてのOOPの手順を超えるマッピングされた方法が呼び出されます:fooはRPCのために、それは、オブジェクトUUIDであってもよいし、オブジェクトへの「ポインタ」である

foo.bar(x1,x2) -> bar(foo,x1,x2) 

を。 (これが実際にはRPCSで行われる方法です)。

ですから、

f=new integer(0); 
f.add(10); 
f.add(20); 
x=f.get(); 
delete f; 

呼び出すにはへ行く:

client: new("integer",0) 
server: return "23ab3cb45" 
client: add("23ab3cb45",10); 
client: add("23ab3cb45",20); 
client: get("23ab3cb45"); 
server: return 30 
client: delete("23ab3cb45"); 
+0

だから、拡張メソッドは良いアイデアではありませんし、私は、それをパラメータとして渡す必要がありますか? –

+0

@the_drowなぜなら、(a)自分自身を特定のオブジェクトに限定するので、基本的にオブジェクトを動的に割り当てることができないからです。(b)オブジェクトIDを使用するAFAIKはRPCでは一般的な方法です。 (c) "。"を使用するメソッド名では一般的にあまり良い考えではありません(IMHO) – Artyom

+0

@Artyom "一般的に" "良い考えではありません。たとえば、別の問題の場合、「questions.new」、「questions.unanswered」が読みやすく、受け入れ可能であることがわかります。あなたのコメントは、問題の言語/実装/使用事例に固有ですか? – Shekhar

関連する問題