Sample REST API(GET) using
Tornado.
Full updated project(with database) is available on
Github
import os.path
import re
import tornado.auth
import tornado.database
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import unicodedata
from tornado.options import define, options
define("port", default=8080, help="run on the given port", type=int)
define("mysql_host", default="127.0.0.1", help="api database host")
define("mysql_database", default="tornado_api", help="tornado_api database name")
define("mysql_user", default="user", help="tornado_api database user")
define("mysql_password", default="password", help="tornado_api database password")
class Application(tornado.web.Application):
def __init__(self):
project_dir = os.getcwd()
# map all handlers here
handlers = [
(r"/", BooksHandler),
(r"/all_book", BooksHandler),
(r"/all_category", CategoryHandler),
(r"/all", AllHandler)
]
settings = dict(
#autoescape=None,
)
tornado.web.Application.__init__(self, handlers, **settings)
# Have one global connection to the blog DB across all handlers
self.db = tornado.database.Connection(
host=options.mysql_host, database=options.mysql_database,
user=options.mysql_user, password=options.mysql_password)
# this is base handler
class BaseHandler(tornado.web.RequestHandler):
@property
def db(self):
return self.application.db
# this handler is for get all book
class BooksHandler(BaseHandler):
def get(self):
entries = self.db.query("SELECT * FROM book WHERE 1")
result = {}
result["book"]=[]
for entrie in entries:
result["book"].append({"id":entrie.id, "name":entrie.name, "title":entrie.title, "author":entrie.author})
self.write(result)
# this handler is for get all category
class CategoryHandler(BaseHandler):
def get(self):
entries = self.db.query("SELECT * FROM category WHERE 1")
result = {}
result["category"]=[]
for entrie in entries:
result["category"].append({"id":entrie.id, "name":entrie.name})
self.write(result)
# this handler is for get all book and category
class AllHandler(BaseHandler):
def get(self):
entries = self.db.query("SELECT * FROM category WHERE 1")
result = {}
result["category"]=[]
for entrie in entries:
result["category"].append({"id":entrie.id, "name":entrie.name})
entries = self.db.query("SELECT * FROM book WHERE 1")
result["book"]=[]
for entrie in entries:
result["book"].append({"id":entrie.id, "name":entrie.name, "title":entrie.title, "author":entrie.author})
self.write(result)
# tornado main function
def main():
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
API call:
http://127.0.0.1:8080/all_book/
http://127.0.0.1:8080/all_category/
http://127.0.0.1:8080/all/
0 comments:
Post a Comment