contrib/tnitter: add REST interface
authorAlexis Laferrière <alexis.laf@xymus.net>
Tue, 10 Nov 2015 13:20:58 +0000 (08:20 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Wed, 11 Nov 2015 19:50:15 +0000 (14:50 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

contrib/tnitter/src/action.nit
contrib/tnitter/src/model.nit
contrib/tnitter/src/tnitter.nit

index 261e842..e40e309 100644 (file)
@@ -18,6 +18,7 @@
 module action
 
 import nitcorn
+import json::serialization
 
 import model
 import database
@@ -31,7 +32,7 @@ redef class Session
 end
 
 # Main Tnitter Action
-class Tnitter
+class TnitterWeb
        super Action
 
        # Header on pages served by this `Action`
@@ -241,3 +242,32 @@ class Tnitter
                return response
        end
 end
+
+# Tnitter RESTful interface
+class TnitterREST
+       super Action
+
+       redef fun answer(request, turi)
+       do
+               if turi == "/list" then
+                       # list?from=1&count=2 -> Error | Array[Post]
+
+                       var from = request.int_arg("from") or else 0
+                       var count = request.int_arg("count") or else 8
+
+                       var db = new DB.open(tnitter_db_path)
+                       var posts = db.list_posts(from, count)
+                       db.close
+
+                       var response = new HttpResponse(200)
+                       response.body = posts.to_json_string
+                       return response
+               end
+
+               # Format not recognized
+               var error = new Error("Bad Request")
+               var response = new HttpResponse(400)
+               response.body = error.to_json_string
+               return response
+       end
+end
index 241baf9..68aeb6e 100644 (file)
 module model
 
 import md5
+import serialization
 
 # A single post (or Tnit)
 class Post
+       serialize
+
        # The author
        var user: String
 
index 490fc07..35d2432 100644 (file)
@@ -58,7 +58,8 @@ var user_group = opts.drop.value
 if user_group != null then user_group.drop_privileges
 
 # Complete server config
-vh.routes.add new Route(null, new Tnitter)
+vh.routes.add new Route("/rest/", new TnitterREST)
+vh.routes.add new Route(null, new TnitterWeb)
 
 # Run
 print "Launching server on http://{interfac} ..."