hfaran / Tornado-JSON

A simple JSON API framework based on Tornado
http://tornado-json.readthedocs.org/
MIT License
273 stars 60 forks source link

Consider additional parameters in main response object. #43

Closed Deiru2k closed 8 years ago

Deiru2k commented 10 years ago

Right now, if I a successful request is served, {'status': 'success', 'data': 'YOURDATA'} will be in an output. It would be nice if one could provide additional information (i.e. total number of objects and page offset for pagination) inside an additional parameter, like {'status': 'success', 'data': 'YOURDATA', "_meta": {"offset" 10, "totalCount": 24}}. I know that this is kinda against JSSend specification, but I think that this will be a very nice feature.

hfaran commented 10 years ago

Hi!

While this is a very good idea; I'm not sure this is something that is easy to integrate into Tornado-JSON, or is a good fit for it.

When I first wrote Tornado-JSON, it was with the intention that it would be used to write relatively simple APIs; hence why I chose JSend as the specification for responses. It seems like you want a much more fully-features specification, such as JSON API. This is difficult to integrate with Tornado-JSON as it stands right now because it is geared towards simplicity.

That being said, this is certainly something that is POSSIBLE to integrate so I would love it if you could provide maybe an example of what the interface or implementation could look like, i.e., how you would go about adding pagination to responses.

hfaran commented 10 years ago

If you wanted to implement this yourself, you could simply create your own Mixin class similar to JSendMixin but one which defined a custom standard to your liking and then have an APIHandler class multi-inherit from that. You would also have to implement your own schema.validate method of course.

hfaran commented 8 years ago

Going to close this because I don't think this would be in appropriate scope. A very easy way to accomplish this would be to simply add the _meta keyword your actual data response, i.e.,:

{"status": "success", "data": {"_meta": ..., "foo": "bar", ...}}

This would then still fit within the confines of JSend.