ServiceStack – Use routes to customise service endpoints

Today, let’s further enhance our simple Flight Service example that I have developed during my last two posts. One problem we have with our service is its service endpoint URL. If you could remember, last time we used a JSON specific request to test the service. Our service URL looked like the following.

http://localhost:63808/json/oneway/FlightRequest

But, if we want to test our service with an XML request then, we can’t use the above service endpoint since it is a JSON specific one. Therefore, we have to produce the XML specific URL using the operations’ XML request specifications.

XMLRequest

Hence, our XML specific URL becomes the following.

http://localhost:63808/xml/oneway/FlightRequest

Now, you get it! Our service URL differs based on the request format that we are willing to use. Isn’t it cool if we could define one service endpoint URL for all request formats? That is exactly what we are going to achieve today using the “Route” functionality of ServiceStack.

Remember, last time I mentioned you that ServiceStack is a very powerful tool that could be used to develop state of art REST APIs. The power of RESTful services hinges around the URL formats. Routes play a vital role when it comes to developing REST APIs using ServiceStack.

Now, let’s go ahead and add a route to our FlightRequest class (see below).

RouteDefinition

Remember, we add routes to request class not to service class. Hence, one service can have different service URLs that belong to different request types. In this example I have used the POST verb option for the route.

Now, press F5 to debug the service. If you go and inspect request details for JSON then, you’ll see that our newly defined route is available to use now.

RouteJSON

Our service URL becomes much simpler too.

http://localhost:63808/flights

Please note that the port number of the above address (happen to be 63808 in my local environment) could be a different one if you run this demonstration in your local environment. So, make sure that you replace 63808 with your local port number.

Let’s use this new service URL in REST Console tool to perform a JSON request. Fill in the required REST Console fields as shown below and press POST button.

JSONTest

Inspect the response and see that we have received our expected response in JSON format.

JSONTestResult

Don’t’ worry about the ArrivalTime and DepartureTime response values as those values are encoded in JASON date/time format which is not very readable.

Now, let’s use the same service URL against an XML request. We can use the sample XML given in XML request specification of the service operation to produce the XML request.

XMLRequestSample

We have to change the request details in REST Console as shown below. Remember, to keep the Request URI unchanged. Press POST button.

XMLTest

Inspect the response and verify that we have received the expected response in XML format.

XMLTestResponse

That’s it! We specified a RESTful URL using Routes in ServiceStack and tested it with JSON and XML request successfully.

Advertisements

About Dilan Perera

I am a Microsoft .NET evangelist (C#) with more than 8 years of hands on experience in software engineering. I have a Bachelor of Engineering degree and a number of certifications including MCPD, MCTS, MCDBA, MCSD, MCAD, and MCP.
This entry was posted in ServiceStack and tagged , . Bookmark the permalink.

One Response to ServiceStack – Use routes to customise service endpoints

  1. Pingback: ServiceStack – more on Routes | Dilan's Blogs

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s