From: Jean Privat Date: Fri, 4 Dec 2015 00:01:47 +0000 (-0500) Subject: Merge: Intro of nitrestful a RESTful API generator X-Git-Tag: v0.8~55 X-Git-Url: http://nitlanguage.org Merge: Intro of nitrestful a RESTful API generator This tool generate a Nit module which implements `Action::answer` to redirect request to a static Nit method. It checks the presence of args, their types, deserialize objects as needed and calls the target method. Missing arguments or arguments with errors (wrong type, failed deserialization, etc.) are replaced by `null` when the corresponding parameter is `nullable`. If the parameter is non-nullable, or if there is any other error, the generated code calls `super` from `answer` for the user code to handle exceptions and errors. With the `restful` annotation we can write a normal method with static types such as: (from the example) ~~~ # User code class MyAction super RestfulAction # Method answering requests like `foo?s=some_string&i=42&b=true` fun foo(s: String, i: Int, b: Bool): HttpResponse is restful do var resp = new HttpResponse(200) resp.body = "foo {s} {i} {b}" return resp end ... ~~~ And nitrestful will generate for use the wrapper extracting the args from the request and call the method `foo`: ~~~ # Generated code by `nitrestful` redef class MyAction redef fun answer(request, truncated_uri) do var verbs = truncated_uri.split("/") if verbs.not_empty and verbs.first.is_empty then verbs.shift if verbs.length != 1 then return super var verb = verbs.first if verb == "foo" then var in_s = request.string_arg("s") var out_s = in_s var in_i = request.string_arg("i") var out_i = deserialize_arg(in_i) var in_b = request.string_arg("b") var out_b = deserialize_arg(in_b) if not out_s isa String or not out_i isa Int or not out_b isa Bool then return super end return foo(out_s, out_i, out_b) end return super end end ~~~ This is an early version of this tool. More work is needed to test different types, different usages, error management, and improve the docs and examples. close #1852 Pull-Request: #1863 Reviewed-by: Jean Privat Reviewed-by: Romain Chanoir Reviewed-by: Jean-Philippe Caissy --- 9214a0edea2ff8038911e82c5a3d3b44ea004c5c