Recently I have been using the rpc package for Dart, which in turn provides a very useful capability: it supports discovery document generation and stub file generation for consuming the API.
However my use case is a little bit different and Dart is not yet there when it comes to easy JS integration (i.e. consuming Dart code from external JS file).
The effort took 3 days, but I am happy to say that it now works for what I have as a small test API. It is very possible that I missed something or there is an edge case I did not see, so apply cautiousness if you decide to use it.
What does it support?
On top of the standard expected things like DTO classes and rpc method implementations the following extras are included:
- integration with the xhr package (goog.labs.net.xhr) for clean promise based interface
- integration with the assertion library and checks on incoming data when goog.DEBUG is true
- dto instances that optionally extend a base class to support event emission when changed
- implements 'toJSON' in order to support easier serialization
- full type information preserved
- closure style guide rules are honored in the resulting code
The main idea was that I wanted the code to be as clean and as useful as if written by hand.
The produced file contains two packages namespaced after the API - one for the DTO classes and one for the rpc call. Resources are nested inside the rpc package.
The whole thing was designed as part of my pstj library. The code is here.
To run it with your project install all dependencies as described in the readme, then use this command:
node path/to/pstjlib/nodejs/discovery --uri http://some/discovery/endpoint --output-path path/to/store/rpc.js
As usual the code is closure compatible and can be run in the browser as well (see here).
I hope it could be useful to someone else as well.