tags:

views:

259

answers:

3

Is there a way to use a webservice (REST in this case) as the data source for a Lift application? I can find a number of tutorials/examples of using Lift to provide the REST API, but in my case the data is hosted elsewhere and exported as a REST webservice. Pointers to doc are greatly appreciated.

Thanks, Jeff

A: 

I've put a scala layer over HttpClient and then use that. I've been meaning to put this on github for some time.

Jim Barrows
+1  A: 

This is not related to Lift in fact. There is a lot of different pieces of information already:

  • HttpClient library as was suggested already,
  • or Dispatch Scala library for accessing HTTP services
  • information on how to cache data in Scala in various ways in case you need it

Think about caching thoroughly, it is generally a good choice if your application generates a lot of requests and you can afford caching. Caching will let you achieve many goals:

  1. decrease response time, as you do not depend on the remote service (if you do synchronous data processing)
  2. avoid Denial of Service in case the remote service dies. Otherwise your application will generate many sockets to read data and exhaust resources (either sockets or threads or something else)
  3. do not exceed SLA of the remote service, as many services constrain the number of requests you are allowed to pefrorm per some unit of time.

So you can just sit and put these things together, that's it.

Alexander Azarov
+1  A: 

If you really want to be fancy, you can create a Record implementation for a REST-based data source. There's already one of these in existence that works with CouchDB. Using the lift-couchdb module, the interactions with CouchDB are abstracted away and all you deal with is the Scala code. There is a short wiki page with instructions on how to get started with lift-couchdb here:

http://www.assembla.com/wiki/show/liftweb/CouchDB

The pertinent source code files are available here:

http://github.com/lift/lift/tree/master/framework/lift-persistence/lift-couchdb/src/main/scala/net/liftweb/couchdb/

Using the Record interface gives you access to lots of Traits which you use to provide functionality with minimal code-writing such as creating HTML forms, providing lifecycle based calls, and easy hooks for validation.

Aaron