【问题标题】:How to approach an Object Oriented API with JSON-RPC?如何使用 JSON-RPC 处理面向对象的 API?
【发布时间】:2010-11-20 20:07:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: json-rpc


    【解决方案1】:

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

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

    否则,您可以按照所有 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");
    

    【讨论】:

    • 所以扩展方法不是一个好主意,我应该将它作为参数传递?
    • @the_drow 否,因为 (a) 您将自己限制在特定对象,所以基本上您不能动态分配对象 (b) 使用对象 ID 的 AFAIK 是 RPC 中的常见做法。 (c) 使用“。”在方法名称通常不是一个好主意(恕我直言)
    • @Artyom 好奇“一般”是否使用 '.'这不是一个好主意。例如,对于不同的问题,我发现“questions.new”、“questions.unanswered”可读且可以接受。您的评论是否特定于所讨论的语言/实现/用例?
    猜你喜欢
    • 1970-01-01
    • 2014-09-24
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多