If you remember, I was asking the other day if there is a "standard" way to do this. Basically there are two
"big options":
- Put paging info in the Http-Header
- Put paging info in the body of the message
While I think paging information are meta data that should not "pollute" the body, I understand the arguments from the JavaScript side that says that they don't easily have access to the http headers
within AJAX requests. So what I have now done is to implement both:
- Paging in the http header: this is the standard way that you get if you just request the "normal" media types of application/xml or application/json (output from running RestAssured):
[update]
My colleague Libor pointed out that the links do not match with format from RFC 5988 Web Linking, which is now fixed.
[/update]
Request method: GET
Request path: http://localhost:7080/rest/resource
Query params: page=1
ps=2
category=service
Headers: Content-Type=*/*
Accept=application/json
HTTP/1.1 200 OK
Server=Apache-Coyote/1.1
Pragma=No-cache
Cache-Control=no-cache
Expires=Thu, 01 Jan 1970 01:00:00 CET
Link=<http://localhost:7080/rest/resource?ps=2&category=service&page=2>; rel="next"
Link=<http://localhost:7080/rest/resource?ps=2&category=service&page=0>; rel="prev"
Link=<http://localhost:7080/rest/resource?ps=2&category=service&page=152>; rel="last"
Link=<http://localhost:7080/rest/resource?page=1&ps=2&category=service>; rel="current"
Content-Encoding=gzip
X-collection-size=305
Content-Type=application/json
Transfer-Encoding=chunked
Date=Thu, 23 May 2013 07:57:38 GMT
[
{
"resourceName": "/",
"resourceId": 10041,
"typeName": "File System",
"typeId": 10013,
….. - Paging as part of the body - there the "real collection" is wrapped inside an object that also contains paging meta data as well as the paging links. To request this representation, a media type of application/vnd.rhq.wrapped+json needs to be used (and this is only available with JSON at the moment):
Request method: GET
Request path: http://localhost:7080/rest/resource
Query params: page=1
ps=2
category=service
Headers: Content-Type=*/*
Accept=application/vnd.rhq.wrapped+json
Cookies:
Body:
HTTP/1.1 200 OK
Server=Apache-Coyote/1.1
Pragma=No-cache
Cache-Control=no-cache
Expires=Thu, 01 Jan 1970 01:00:00 CET
Content-Encoding=gzip
Content-Type=application/vnd.rhq.wrapped+json
Transfer-Encoding=chunked
Date=Thu, 23 May 2013 07:57:40 GMT
{
"data": [
{
"resourceName": "/",
"resourceId": 10041,
"typeName": "File System",
"typeId": 10013,
…
],
"pageSize": 2,
"currentPage": 1,
"lastPage": 152,
"totalSize": 305,
"links": [
{
"next": {
"href": "http://localhost:7080/rest/resource?ps=2&category=service&page=2"
}
},
…
}
Please try this if you can. We want to get that into a "finished" state (as for the whole REST-Api) for RHQ 4.8
2 comments:
Nice! The best of both worlds. Server side developers can use the more standard header method and client side ajax requests can consume the inline method.
Very good resolution indeed!
Post a Comment