[aerogear-dev] Paging Demo

Daniel Bevenius daniel.bevenius at gmail.com
Thu Jan 10 04:02:53 EST 2013


We talked about paging yesterday on IRC, and it was decided to add a paging
example to aerogear-controller-demo. What follows is an example to kick of
further discussion about what the example should look like.

AeroGear Controller Demo Paging Route

This page discusses
AEROGEAR-795<https://issues.jboss.org/browse/AEROGEAR-795> which
is about adding an example to aerogear-controller-demo to demonstrate
paging support so that the client libraries (Android, JavaScript, and iOS)
can be tested against it.

This is only a suggestion and the implementation and the names of the query
parameters can all be changed.
Use case

The example is using cars as the resource to interact with. To be able to
query we need something to query, so lets start by adding some cars by
posting.
Adding Cars

URL="http://controllerdemo-danbev.rhcloud.com/aerogear-controller-demo"

curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Black&car.brand=BMW" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Red&car.brand=Ferrari" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Blue&car.brand=Skoda" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Green&car.brand=Audi" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Yello&car.brand=Opel" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Pink&car.brand=Mini" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Gray&car.brand=Nissan" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Red&car.brand=Volvo" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Blue&car.brand=Saab" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Black&car.brand=Mazda" -X POST "$URL/cars"
curl -i --header "Accept: application/json" -H "Content-type:
application/x-www-form-urlencoded" --data
"car.color=Yello&car.brand=Golf" -X POST "$URL/cars"

The example uses an in-memory database so the data will be cleared upon
redployment/restart of the server. So you only need to populate/post when
you've restared or redployed.

With the cars in place, we can now issue GET requests with paging query
parameters. The following route has been added to the demo:

route()
      .from("/cars")
      .on(RequestMethod.GET)
      .produces(MediaType.JSON.toString())
      .to(Cars.class).get(param("page", "0"), param("perPage", "-1"));

>From this we can see that there are two optional parameters, page and
perPage. If these are not specified all cars will be returned.
Getting a page of Cars

URL="http://controllerdemo-danbev.rhcloud.com/aerogear-controller-demo"
curl -i --header "Accept: application/json" "$URL/cars?page=0&perPage=4"

The request will return:

{
  "metadata":{"page":0,"perPage":4},
  "cars":[
            {"color":"Black","brand":"BMW","id":1},
            {"color":"Red","brand":"Ferrari","id":2},
            {"color":"Blue","brand":"Skoda","id":3},
            {"color":"Green","brand":"Audi","id":4}
          ],
  "links":{
          "first":"cars?page=0&page=4",
          "previous":"cars?page=0&page=4",
          "next":"cars?page=1&page=4"
          }}

Getting the next page of Cars

To get the next page you can follow the next link:

URL="http://controllerdemo-danbev.rhcloud.com/aerogear-controller-demo"
curl -i --header "Accept: application/json" "$URL/cars?page=1&perPage=4"

{
    "metadata":{"page":1,"perPage":4},
    "cars":[
            {"color":"Yello","brand":"Opel","id":5},
            {"color":"Pink","brand":"Mini","id":6},
            {"color":"Gray","brand":"Nissan","id":7},
            {"color":"Red","brand":"Volvo","id":8}
           ],
    "links":{
            "first":"cars?page=0&page=4",
            "previous":"cars?page=0&page=4",
            "next":"cars?page=2&page=4"
            }}

Get all Cars

URL="http://controllerdemo-danbev.rhcloud.com/aerogear-controller-demo"
curl -i --header "Accept: application/json" "$URL/cars"

Get a single Car

URL="http://controllerdemo-danbev.rhcloud.com/aerogear-controller-demo"
curl -i --header "Accept: application/json" "$URL/cars/1"

The request will return:

{"color":"Black","brand":"BMW","id":1}

Again, anything here can be changed, the name of the query parameters, the
implementation, and what is returned.

Reference:

   - Paging Support in AeroGear Controller <https://gist.github.com/4147473>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/aerogear-dev/attachments/20130110/cff187f3/attachment-0001.html 


More information about the aerogear-dev mailing list