我正在探索jsonrpc 2来获取Web服务。我有一些java rmi的经验,非常喜欢。为了方便我使用zend框架,所以我想我喜欢使用该库。然而,有一件事我想念。如何使过程发回对其他对象的引用。
我得到的不是协议,因为它关于程序,但它仍然是一个有用的东西。与java rmi一样,我可以选择通过值(序列化)或引用(远程对象代理)发送的对象。那么解决这个问题的最佳方法是什么?大多数图书馆使用的是否有任何标准?
我花了一些时间在谷歌上寻找这个并且可以想到一个解决方案(比如返回一个网址)但是,我宁愿使用标准然后设计新的东西。
还有一件事我希望你的意见。我听到一位建筑师对协议发送批量呼叫的功能提出了异议。被认为是好看还是脏? (他认为他们丑陋但我能想到当时使用)
更新
我认为好的方法就是将带有url的remoteref对象返回给对象。这样它只是一个小包装和litle文档。但我想知道是否有一种方法可以做到这一点。
SMD Posibilitie's
可能有某种方法可以在我的smd中指定返回类型,是否有人想知道如何在smd返回类型中引用另一个页面?或者有没有人知道zend_json_smd类的一个很好的explenation?
答案 0 :(得分:0)
您无法通过JSON-RPC返回任何类型的引用。
没有标准可以这样做(afaik)因为RPC是无状态的,大多数开发人员都喜欢这样做。这种简单性使得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
网址remote_id
传递给服务器(以便服务器知道哪个远程对象代理映射到哪个服务器端对象。)虽然这个方案是可行的,但是有很多可移动的部分,而且客户端的代码比普通的JSON-RPC更大,更复杂。
JSON-RPC本身并没有很好地标准化,因此大多数扩展(甚至是SMD)仅仅是关于方法名称和有效负载的约定。