JSON-RPC Extensions

Here is a place to add extensions to the JSON-RPC protocol used by qooxdoo. Each extension must have a unique name containing only alphanumerical ASCII-characters and the underscore (/[a-zA-Z0-9_]+/).

Please add a detailed description here describing the proposed extension, with information which server implements this behavior. Ideally, create a new page with detailed information on the behavior of the extension and how to implement it. Please also add a bug, marked as a "json-rpc server extension" so that other server maintainers can discuss the pros and cons of adding the extension to their own servers.

system.getCapabilities

This is a proposal for the extension of the "core" standard. Each server should implement a service "system" with a method "system.getCapabilities()" (similar to http://tech.groups.yahoo.com/group/xml-rpc/message/2897), which returns the extensions that it supports. Server implementations which do not support extensions simply return an an empty object ({}).

Servers which support extensions return information on these extensions with the following return value structure (still to be discussed):

{
  "introspection" : {
    "specUrl" : "http://qooxdoo.org/documentation/jsonrpc_extensions",
    "specVersion" : "0.1",
    "specServices" : [],
    "specMethods" : ["*.listMethods","*.methodSignature","*.methodHelp"]
  },
  "authentication" : {
    "specUrl" : "http://path.to/information/on/authentication/extension.html",
    "specVersion" : "1.0",
    "specServices" : ["authentication","authorization"],
    "specMethods" : []
  },
  "foo" : {
    "specUrl" : "http://path.to/information/on/foo/extension.html",
    "specVersion" : "1.0",
    "specServices" : ["foo"],
    "specMethods" : ["foo.dothis","foo.dothat"]
  }
}

In the first example, the "introspection", the server supports the three given methods for *all* services offered. The second example, an "authentication" capability offers two services, "authentication" and "authorization". The third capability provides for the "foo" service and details the methods that this service contains. All services can be queried for the supported methods using the "listMethods", "methodSignature" and "methodHelp" methods that are part of the "introspection" feature.

system.getCapabilities is implemented in the RpcPython and RpcPhp servers.

introspection: Service Method Introspection

Purpose: implementing introspection similar to XMLRPC:

http://xmlrpc-c.sourceforge.net/introspection.html

In contrast to the XMLRPC standard, the methods "listMethods", "methodSignature" and "methodHelp" are not methods of a virtual service "system", but are made available as parts of the service class itself. See detailed information

The "introspection" extension is implemented in the RpcPython and RpcPhp servers.

qooxdoo JSON dates

Traditionally, qooxdoo JSON-RPC backends have been required to support a non-standard feature of JSON, passing Date object instances as instantiations of a Date object using syntax like new Date(Date.UTC(2009,11,29,3,10,23,973)) since dates are not a part of the JSON specification. This proposal moves qooxdoo Dates into the realm of "extension" rather than required functionality.

Details are discussed here.