Rest service and client in DART
The DART language looks like a promising way to write rich clients in a high level language. I have been looking at DART and the Ruby to JavaScript compiler Opal as possible (but not likely) substitutes for Clojurescript with Clojure back ends. It took me a little while to get a simple REST service and client working in development mode inside the DART IDE. The following code snippets might save you some time. Here is a simple service that returns some JSON data:
import 'dart:io';
import 'dart:json' as JSON;
main() {
var port = 8080;
HttpServer.bind('localhost', port).then((HttpServer server) {
print('Server started on port: ${port}');
server.listen((HttpRequest request) {
var resp = JSON.stringify({
'name': 'Mark',
'hobby': 'hiking'}
);
request.response..headers.set(HttpHeaders.CONTENT_TYPE,
'application/json');
request.response..headers.set('Access-Control-Allow-Origin','*');
request.response..headers..write(resp)..close();
});
});
}
It is required to set Access-Control-Allow-Origin. Here is the client code (I am not showing the HTML stub that loads the client):
import 'dart:html';
import 'dart:json';
void main() {
// call the web server asynchronously
var request = HttpRequest.getString("http://localhost:8080/")
.then(onDataLoaded);
}
void onDataLoaded(String responseText) {
var jsonString = responseText;
print(jsonString);
Map map = parse(jsonString);
var name = map["name"];
var hobby = map["hobby"];
query("#sample_text_id").text =
"My name is $name and my hobby is $hobby";
}
The call to query(…) is similar to a jQuery call. As you might guess, “#sample_text_id” refers to a DOM element from the HTML page with this ID. DART on the client side seems to be very well supported both with components and tooling. I think that DART on the server side is still a work in progress but looks very promising.