Writing

Building an API with Flask

Getting started

Getting Started

Quickstart: http://docs.jinkan.org/docs/flask/quickstart.html

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

Visit http://127.0.0.1:5000/ and you will see the greeting.

image

  • Allow external access

app.run(host=‘0.0.0.0’)

Building Your Own API

Version 1

  • Feature description

Parse text from the URL and process it—in my case, named entity recognition and relation extraction on the text.

# -*- coding: utf-8 -*-
# antuor:dxiaod
from flask import Flask, request
app = Flask(__name__)

@app.route('/',methods=['GET'])
def get_text_input():
    text = request.args.get('inputstr')
    print(text)
    return text
if __name__ == "__main__":
    app.run(host='0.0.0.0',debug=True)

Visit http://0.0.0.0:5000/?inputstr=%E4%BD%A0%E5%A5%BD%E5%95%8A to see your text.

Version 2

  • Feature description: customize API per external docs. Request: JSON-style string parameters. Response: JSON-style string.

  • Request params: bind_request_params

  • Response: Response

# -*- coding: utf-8 -*-
# antuor:dxiaod
from flask import Flask, request, Response
from flask_request_params import bind_request_params
import json
app = Flask(__name__)
app.before_request(bind_request_params)

@app.route('/projectname/name',methods=['GET'])
def get_text_input():
    # text = request.args.get('inputstr')
    text = request.params["askjson"]
    action = request.params["action"]
    jieguo = {"text":text}
    print(text)
    return Response(json.dumps(jieguo))
if __name__ == "__main__":
    app.run(host='0.0.0.0',debug=True)

Browser: http://0.0.0.0:5000/projectname/name?action=query&askjson=nihaio Result:

image

Version 3

Feature description: client accesses server and sends data; use POST for parameters. POST body via request.form. Server:

#-*- conding:utf-8 -*-
'''
Verify POST parameter requests
'''
from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'hello world'

@app.route('/register', methods=['POST'])
def register():
    print(request.method)
    print(request.form)
    print(request.form['name'])
    print(request.form.get('name'))
    print(request.form.getlist('name'))
    print(request.form.get('nickname', default='little apple'))
    return 'welcome'

if __name__ == '__main__':
        app.run(debug=True)

Client:

#-*- conding:utf-8 -*-

import requests

user_info = {'name': 'letian', 'password': '123'}
r = requests.post("http://127.0.0.1:5000/register", data=user_info)

print(r.text)