Method Table Handler System
Contents
I find this a very convenient way to organize a web application. One defines a hash table of string keys that an application supports to the functions that handle each call.
This is how Iguana itself is organized, just a hash table of strings assigned function pointers implemented in C++.
It’s much easier to implement this structure in Lua than in C++ since Lua supports functions as first class values. This how this example does it. A global Lua table is defined called MethodTable:
MethodTable={ file=ServeFile, channel_list=ChannelList, save_settings=SaveSettings, load_settings=LoadSettings, }
This just has string keys mapped to Lua functions. When we get a request we can look for a POST or GET variable called ‘method’. If we have a handler function registered for that method, then we call it with the Request object.
local Request = net.http.parseRequest{data=Data} local MethodName = Request.params.method if MethodTable[MethodName] then MethodTable[MethodName](Request) else local Body = template.Recall('main.html') net.http.respond{body=Body} end
If no method exists we return the default main.html template.
This makes for a straightforward work flow to add new calls.