Как приблизиться к объектно-ориентированному API с помощью JSON-RPC? - PullRequest
1 голос
/ 20 ноября 2010

У меня есть API в C #, который не будет отображаться в JSON-RPC из-за того, что JSON-RPC ориентирован на процедурный процесс.Как в JSON-RPC вы представляете объектно-ориентированный API?
Конечно, я могу использовать расширения JSON-RPC, чтобы запрос выглядел следующим образом:

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

Но он выглядит как хакерскийтребует много работы, чтобы определить.Я также могу включить его в качестве параметра, но, опять же, он просто не выглядит правильным.
Есть ли лучшая практика в отношении работы с объектно-ориентированным API с использованием JSON-RPC?

1 Ответ

4 голосов
/ 21 ноября 2010

JSON-RPC - это JSON Remote Процедура Вызов и по умолчанию ориентированная на процедуру.

Однако если вы работаете по HTTP, вы можете видеть каждую службу RPC как объект.Т.е. если вы обращаетесь к /foo/bar и вызываете beep через JSON-RPC через HTTP, то вы вызываете beep метод foo службы bar объекта.

В противном случае вы можете сделать это так, как всеООП отображает вызовы процедур:

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

Где foo является «указателем» на объект, для RPC это может быть объект UUID.(Вот как это на самом деле делается в некоторых 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");
...