As mentioned in my previous post(RESTful implementation using .Net) i would like to share further lights on RESTful implementation using .net, this time on implementing friendly RESTful urls using HTTP Modules. Before getting into the post as such, i would like the audience to look into topics related to query string injection and prevention techniques as RESTful urls mostly deal with query strings , HTTP GET, POST verbs, etc.
Friendly REST urls
As an example , for a url, (the below shown url is the same RESTful url, that i had implemented in my previous post(RESTful implementation using .Net) to get employee details).
we can make it user friendly as below,
i am going take this simple scenario and show how such friendly url rewriting can be implemented using HTTP Modules. Once we get the concept, we can go ahead in developing robust url rewriting engines.
HTTP Module is one of the extensibility feature and advantage provide in .Net Framework. This helps in intercepting and manipulating each of the http requests that comes from the client to the server application. Now in order to provide meaningful RESTFul urls, i am going to make use of this advantage provided by the HTTP pipeline. Below diagram describes the HTTP pipeline and the components involved in a typical client server architecture involving .net.
In order to tap the incoming request using http module in our application (Web, Web service, etc) following things are to be performed.
1. Creating Http Module class :
Add a normal class file to the application which implements IHttpModule and its members,
The Init method can be made use to perform initializations that are required and which also holds the handle to the HttpApplication object which in turn has control over the request, response objects.
Here in the Init method, i am adding a event handler which processes the application’s begin request event.
public void Init(System.Web.HttpApplication app)
app.BeginRequest += new EventHandler(Rewrite_BeginRequest);
then in my Rewrite_BeginRequest custom method, i am adding a simple piece of code,which intercepts the incoming request url, checks for the user-friendly format ( these formats are to be predefined and shared to the consumers of the webs service as some manuals / guidelines, so that they get an idea on how to query for a particular data), if valid, rewrites the url to the original page with the desired & required parameters as query strings.
Pseudo code of the Rewrite_BeginRequest(object sender, System.EventArgs args) implementation,
1. Typecast the incoming sender object to the http application object in order to get the handle of request, response, context and other asp.net objects.
System.Web.HttpApplication Appl = (System.Web.HttpApplication)sender;
2. Tap the incoming request url, look for the friendly url pattern "/employeeprofile/GetInfo/Ã¢‚¬, if valid , crop , validate and store the id part which follows the pattern.(the valid employee id number like 1, 10, etc which comes as part of the ur after the pattern - "/employeeprofile/GetInfo/1 ) .
3. Now, once the id is retrieved, rewrite the url to the original page by using,
That’s it, now the coding for the url rewriting is done. as this is a simple demonstration i have hard-code the urls, but when it comes to real-time implementation we can define the friendly url patterns and their respective redirection urls in some configuration file and create a url redirection module / library /engine which performs the above pseudo logic.
2. Web Config entry:
Once the coding part is over, we need to configure the custom http module in the web config, hence forth ASP.Net engine recognizes the module and invokes it,
<add type="RESTFulService.RESTfulHandlerModule,RESTFulService" name="RESTFulRewriter" /> </httpModules>
the type attribute, takes in classname, assemblyname as input.
the name attribute is any meaningful name.
I hope this post would be a starter point in the future implementation of a robust URL rewriter engine.