Как подойти к объектному ориентированному API с JSON-RPC?
-
26-09-2019 - |
Вопрос
У меня есть API в C #, который не будет отображать JSON-RPC из-за того, что JSON-RPC процедурно ориентирован. Как в JSON-RPC вы бы представляли объектно-ориентированные API?
Конечно, я могу использовать расширения JSON-RPC, так что запрос будет выглядеть так:
{ "jsonrpc":"2.0", method:"ObjectName.Method", "params":[], "id": 1 }
Но это кажется вроде взлома, а также требует много работы, чтобы определить. Я также могу включить его в качестве параметра, но опять же, просто не чувствует себя правильно.
Есть ли лучшая практика в отношении работы против ориентированного объекта API с использованием JSON-RPC?
Решение
JSON-RPC JSON Remote Процедура Вызов и по умолчанию ориентирован на процедуру.
Однако, если вы работаете над HTTP, вы можете увидеть каждую службу RPC в качестве объекта. Т.е. если вы получите доступ /foo/bar
и позвонить beep
через JSON-RPC через http, а затем вы звоните beep
метод foo
служба bar
объект.
В противном случае вы можете сделать это, как все OOP сопоставлены по процедуре вызовы:
foo.bar(x1,x2) -> bar(foo,x1,x2)
Где foo - это «указатель» для объекта, для RPC может быть объектом UUID. (Вот как это на самом деле сделано в некоторых RPC).
Итак, вы называете
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");