如何使用 JSON-RPC 处理面向对象的 API?

发布于 2024-10-03 08:43:52 字数 310 浏览 3 评论 0原文

我有一个 C# API,它不会映射到 JSON-RPC,因为 JSON-RPC 是面向过程的。 如何在 JSON-RPC 中表示面向对象的 API?
我当然可以使用 JSON-RPC 扩展,以便请求看起来像:

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

但感觉有点 hackish 并且还需要大量工作来定义。 我也可以将它作为参数包含在内,但它又感觉不对。
是否有关于使用 JSON-RPC 处理面向对象 API 的最佳实践?

I have an API in C# that won't map to JSON-RPC due to the fact that JSON-RPC is Procedurally oriented.
How in JSON-RPC would you represent an Object Oriented API?
I can of course use the JSON-RPC extensions so that the request would look like:

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

But it feels kinda hackish and also requires a lot of work to define.
I can also include it as a parameter but again it just doesn't feel right.
Is there a best practice regarding working against an Object Oriented API using JSON-RPC?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

追我者格杀勿论 2024-10-10 08:43:53

JSON-RPC 是 JSON 远程过程调用,默认情况下面向过程。

但是,如果您通过 HTTP 工作,您可以将每个 RPC 服务视为对象。即,如果您访问 /foo/bar 并通过 HTTP 上的 JSON-RPC 调用 beep,那么您将调用 foobeep 方法bar 对象的 code> 服务。

否则,您可以按照所有 OOP 映射到过程调用的方式来执行此操作:

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");

JSON-RPC is JSON Remote Procedure Call and by default procedure oriented.

However if you work over HTTP you can see each RPC service as object. I.e. if you access /foo/bar and call beep over JSON-RPC over HTTP then you call beep method of foo service of bar object.

Otherwise you may do it the way all OOP mapped over procedure calls:

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

Where foo is "pointer" to object, for RPC it may be object UUID. (That is how it is actually done in some RPCS).

So you call

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

Goes to:

client:   new("integer",0)
server:   return "23ab3cb45"
client:   add("23ab3cb45",10);
client:   add("23ab3cb45",20);
client:   get("23ab3cb45");
server:   return 30
client:   delete("23ab3cb45");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文