Let’s assume you have written this complex classifier that you now want to deploy behind an
API:

classCatVsDogPersonClassifier(object):defpredict(self,first_name,last_name):"""Determine whether someone is a cat or a dog person."""iflast_namein{'Schrodinger','Schrödinger','Schroedinger'}:return'cat'else:return'dog'

In order to quickly deploy this, let’s wrap this in a Flask application. Flask is a
popular lightweight Python library for writing APIs.

Save the following in a file called app.py in the root of your project:

# coding: utf-8importloggingfromflaskimportFlask,jsonify,request,abort,make_responselogging.basicConfig(level=logging.INFO)flask_server=Flask(__name__)PORT=8000classCatVsDogPersonClassifier(object):defpredict(self,first_name,last_name):"""Determine whether someone is a cat or a dog person."""iflast_namein{'Schrodinger','Schrödinger','Schroedinger'}:return'cat'else:return'dog'classifier=CatVsDogPersonClassifier()def_parse_request_body():"""Extract first and last name from request."""request_body=request.get_json(force=True)try:first_name=request_body['firstName']last_name=request_body['lastName']exceptKeyError:# Missing first or last name fields.logging.info('Badly formatted request body: {}'.format(request_body))response_body={'error':"Missing 'firstName' or 'lastName' key in request body"}response=make_response(jsonify(response_body),400)abort(response)returnfirst_name,last_name@flask_server.route('/predict',methods=['POST'])defpredict():"""Respond to requests for a prediction."""first_name,last_name=_parse_request_body()person_type=classifier.predict(first_name,last_name)logging.info('Predicted that {} {} is a {} person'.format(first_name,last_name,person_type))returnjsonify({"mostLikely":person_type})if__name__=='__main__':logging.info('Listening on port {}'.format(PORT))flask_server.run(debug=True,host='127.0.0.1',port=PORT)

We can now create our API. Go to the APIs page for your project in SherlockML
and create a new API. You will be asked to choose a name, a domain name and a
type for your API. For type, choose Flask(Python). Your domain name needs
to be unique across all of SherlockML. I suggest a domain name like
cats-vs-dogs-2118, where you replace 2118 with a random string of your
choice. In the API settings page, change the working directory to /project,
the python module to app (the name of your python script), and the python
object to flask_server (the name of the flask object defined in our script).
You can leave the environments dropdown empty.

After you have your API set up, you can test and ultimately deploy it. Head to
Test your API to find out how to go about the testing process.

Once you are familiar with the API development process, you may want to write a
more complex API. Take a look at these examples below for inspiration: