我正在探索用于Web服务的jsonrpc 2。 我对Java rmi有一些经验,非常喜欢。 为了使事情变得容易,我使用zend框架,所以我想我喜欢使用该库。 但是,我缺少一件事。 如何使过程发回对另一个对象的引用。
我知道这不在协议之内,因为它是关于程序的,但这仍然是有用的。 像使用Java rmi一样,我可以选择按值(序列化)或引用(远程对象代理)发送的对象。 那么解决此问题的最佳方法是什么? 大多数图书馆都使用此标准吗?
我在Google上花了数小时的时间来寻找它,并且可以想到一个解决方案(例如返回url),但是,我宁愿使用标准然后设计新的东西。
我想请您谈谈另一件事。 我听过一位建筑师兰特介绍了发送批量呼叫的协议功能。 被认为是好还是脏? (他认为它们在哪里很丑,但我可以考虑使用它)
更新
我认为最喜欢的方法是返回带有URL的remoteref对象。 这样,它只需要一个小的包装纸和一个小文件。 但是我想知道是否有一种通俗的方式来做到这一点。
SMD Posibilitie的
可能有一些方法可以在我的smd中指定返回类型,是否有人想知道如何在我的smd返回类型中引用另一个页面? 还是有人知道zend_json_smd类很好吗?
您无法通过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 remote_id
传递给服务器(以便服务器知道哪个远程对象代理映射到哪个服务器端对象。) 尽管此方案可行,但有很多活动部件,并且与普通的JSON-RPC相比,客户端的代码更大,更复杂。
JSON-RPC本身尚未很好地标准化,因此大多数扩展(甚至是SMD)仅是围绕方法名和有效负载的约定。