jsonrpc2返回远程参考

问题描述 投票:1回答:1

我正在探索用于Web服务的jsonrpc 2。 我对Java rmi有一些经验,非常喜欢。 为了使事情变得容易,我使用zend框架,所以我想我喜欢使用该库。 但是,我缺少一件事。 如何使过程发回对另一个对象的引用。

我知道这不在协议之内,因为它是关于程序的,但这仍然是有用的。 像使用Java rmi一样,我可以选择按值(序列化)或引用(远程对象代理)发送的对象。 那么解决此问题的最佳方法是什么? 大多数图书馆都使用此标准吗?

我在Google上花了数小时的时间来寻找它,并且可以想到一个解决方案(例如返回url),但是,我宁愿使用标准然后设计新的东西。

我想请您谈谈另一件事。 我听过一位建筑师兰特介绍了发送批量呼叫的协议功能。 被认为是好还是脏? (他认为它们在哪里很丑,但我可以考虑使用它)

更新

我认为最喜欢的方法是返回带有URL的remoteref对象。 这样,它只需要一个小的包装纸和一个小文件。 但是我想知道是否有一种通俗的方式来做到这一点。

SMD Posibilitie的

可能有一些方法可以在我的smd中指定返回类型,是否有人想知道如何在我的smd返回类型中引用另一个页面? 还是有人知道zend_json_smd类很好吗?

zend-framework json-rpc smd
1个回答
0
投票

您无法通过JSON-RPC返回任何类型的引用。

由于RPC是无状态的,所以没有这样做的标准(afaik),并且大多数开发人员都喜欢这种方式。 这种简单性使JSON-RPC成为客户端开发人员通过SOAP(和其他混乱局面)所希望的。

但是,您可以在返回值中采用一种约定,即应将某些JSON构造视为“线索”以制造远程“对象”代理。 例如,您可以创建一个修改后的JSON反序列化器,该序列化如下:

{
    "__remote_object": {
        "class":     "Some.Remote.Class",
        "remote_id": 54625143,
        "smd":       "http://domain/path/to/further.smd",
        "init_with": { ... Initial state of object ...  }
    }
}

通过以下方式进入远程对象代理:

  • 使用以class命名的原型创建本地对象,并通过init_with初始化
  • 下载并处理smd URL
  • 为通过API公开的每个过程创建一个本地代理方法(在对象代理中),以使它们在每次调用时将remote_id传递给服务器(以便服务器知道哪个远程对象代理映射到哪个服务器端对象。)

尽管此方案可行,但有很多活动部件,并且与普通的JSON-RPC相比,客户端的代码更大,更复杂。

JSON-RPC本身尚未很好地标准化,因此大多数扩展(甚至是SMD)仅是围绕方法名和有效负载的约定。

© www.soinside.com 2019 - 2024. All rights reserved.