Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Python Rest API Example — Part 3

DZone 's Guide to

Python Rest API Example — Part 3

Learn to code your API endpoints in Part 3 of this series on building a Python REST API for your microservices.

· Microservices Zone ·
Free Resource

With the transition to microservices, it becomes necessary to know how to write simple Rest API's using Python. In this post, I give a python rest API example using Tornado.

This is the third part of this series, where we will code the API endpoints.

Our Python Rest API Example Code

As stated earlier, this post is where we code the endpoint handlers for our microservice. The first handler we will code is the AddHandler class which we will use to add a book.

addhandler.py

import tornado.web
import book
import json

class AddHandler(tornado.web.RequestHandler):
    def initialize(self, books):
        self.books = books

    def get(self):
        title = self.get_argument('title')
        author = self.get_argument('author')
        result = self.books.add_book(title, author)
        self.write(result)

Notice the initialize method of our class. This is how we pass the instantiated books object to this class so that we can actually do something with it. If we defined a new one here it would instantiate a new Book object for each request. This way we persist the data across the calls as long as the Tornado application is running. A better way to do this is to use a database, but I wanted to keep it simple for this post. In a future post, we will convert this microservice to use a database backend so that the data can persist between application runs.

We use the tornado.web.RequestHandler.get_argument method to get the URL parameters we need to add a book (title and author).

Here is the DelHandler code:

delhandler.py

import tornado.web
import book
import json


class DelHandler(tornado.web.RequestHandler):
    def initialize(self, books):
        self.books = books

    def get(self):
        title = self.get_argument('title')
        result = self.books.del_book(title)
        if result:
            self.write("Deleted book title: {0} succsessfully".format(title))
            self.set_status(200)
        else:
            self.write("Book '{0}' not found".format(title))
            self.set_status(404)

This is very similar to our AddHandler above. We pass it the books object in the initialize method so we can work with it. We also define a parameter "title" which we will use to call the books.del_book(title) method to delete the book. This will return true or false based on whether the book was found and deleted. If True then the book was deleted and we can return an HTTP status of 200 with the book title deletion status. If the book was not found then we return an HTTP status of 404 and write a status that we can't find the book with the given title.

The last handler is the GetHandler which will list out all our books as JSON. This will make it handy to use from other microservices or applications.

gethandler.py

import tornado.web
import book
import json


class GetHandler(tornado.web.RequestHandler):
    def initialize(self, books):
        self.books = books

    def get(self):
        self.write(self.books.json_list())

This our easiest handler because it doesn't take any arguments. We simply call books.json_list() and write the output back to the Request.

Now all you have to do is run the API with the following command:

$ python api.py

Add a book:

http://yourserver:8888/v1/addbook?title="How to Make a Million Dollars Blogging"&author="Bill Ward"

List all the books:

http://yourserver:8888/v1/getbooks

Delete the same book:

http://yourserver:8888/v1/delbook?title="How to Make a Million Dollars Blogging"

There you go. A simple python Rest API example. In the future, I hope to expand on this example by adding a database backend, token security, and more. Subscribe to my newsletter to be notified of all my latest articles.

All of this code is available on GitHub.

I hope you have enjoyed this article — if so, please leave a comment below.

Topics:
microservices ,tutorial ,python ,rest api ,api

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}