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