TECH_FLASK

使用Python和Flask设计RESTful API(一)

2017-06-09  本文已影响213人  c4a1d989518e

首先设计RESTful API这件事,用Django和Flask都可以,但是Flask这个框架是专门用来设计API的,入门也更简单,也更符合前后端分离的大趋势。什么是前后端分离,比如Django来设计的网页,那就不叫前后端分离,它的页面展示和逻辑处理都放在了一块,而前后端分离,是后端负责提供API,不负责页面展示的。

要使用Flask得步骤:

pip install flask

安装好了以后,就可以直接新建一个Flask的文件了。

比如我这里新建好之后,就是这样的工程结构,比Django看起来简洁很多。其中的初始代码为

#!flask/bin/python
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hello, World!"

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

执行这段代码,run起来后,按照log中的提示访问localhost:5000就好了。页面会展示一个Hello,World。好了接下来要正式写json接口了。
先上代码:

#!flask/bin/python
from flask import Flask, jsonify

app = Flask(__name__)

tasks = [
    {
        'id': 1,
        'title': u'Buy groceries',
        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
        'done': False
    },
    {
        'id': 2,
        'title': u'Learn Python',
        'description': u'Need to find a good Python tutorial on the web',
        'done': False
    }
]

@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

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

代码很容易理解,其中的jsonify是什么意思?

这个函数的响应不是文本,我们使用 JSON 数据格式来响应,Flask 的 jsonify 函数从我们的数据结构中生成。

接下来是难度升级,如何实现根据不同的id请求来返回不同的json数据。更换路由部分的代码:

from flask import abort

@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = filter(lambda t: t['id'] == task_id, tasks)
    if len(task) == 0:
        abort(404)
    return jsonify({'task': task[0]})

浏览器访问这个地址http://localhost:5000/todo/api/v1.0/tasks/2,会返回task中id为2的json数据,如果访问地址为http://localhost:5000/todo/api/v1.0/tasks/3,因为其中没有数据,所以会报404.
就其中的代码,有难度的地方在于lambda函数。
简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。先举一个普通的 Python 例子:将一个 list 里的每个元素都平方:

map( lambda x: x*x, [y for y in range(10)] )

这个写法要好过

def sq(x):
    return x * x
map(sq, [y for y in range(10)])

lambda t: t['id'] == task_id, tasks的意思就容易理解了,返回tasks中数据id为请求中的id的task。

可以自己定制测试数据来用了,对于前端和测试来说,尽管mock也能做这样的事情。

上一篇 下一篇

猜你喜欢

热点阅读