$ pip install bottle-api
json_endpoint decorator will make a function to JSON WebAPI endpoint. decorated function will return bottle.HTTPResponse.
see this sample web app:
#!python from bottleapi import WebApiError from bottleapi.jsonapi import json_endpoint from bottle import Bottle, request app = Bottle() @json_endpoint def devide(): a = int(request.params['a']) b = int(request.params['b']) if b == 0: raise WebApiError('b cannot be zero', status=400) result = a / b return dict(value=result) app.route('/devide', ['GET'], devide)
if you access /devide?a=1&b=1
, it will return 200 OK
response with body:
{"status": "ok", "result": {"value": 1}}
with Content-Type application/json
but when you access devide?a=1&b=0
, you will get 400 BAD REQUEST
response with body:
{"status": "error", "message": "b cannot be zero", "result": null}
If you want to use JSONP, you can specify callback function name with parameter(j
by default)
So accessing /devide?a=4&b=2&j=my_callback
will result:
my_callback({"status": "ok", "result": {"value": 2}});
If you dont like parameter or result data format, You can define your own formatters(success/error). See jsonapi.py for customized formatter example.