[python] 使用flask框架搭建一个restful服务

  1. 什么是REST
    REST 全称是 Representational State Transfer,表现层状态转移,是一种架构风格。简单的讲,就是一种web交互方式,用户通过特定的url访问资源,资源以json格式返回给用户。举一个查天气的例子:
    https://v0.yiketianqi.com/api?version=v10&appid=xxx&appsecret=xxx

当然这里要填真实的appid和appsecret数据,才能查得到。

返回

{
    "air":"99",
    "air_level":"良",
    "air_tips":"空气好,可以外出活动,除极少数对污染物特别敏感的人群以外,对公众没有危害!",
    "pm25":"66",
    "pm25_desc":"良",
    "pm10":"147",
    "pm10_desc":"良",
    "o3":"29",
    "o3_desc":"优",
    "no2":"62",
    "no2_desc":"良",
    "so2":"11",
    "so2_desc":"优",
    "kouzhao":"无需戴口罩",
    "waichu":"适宜外出",
    "kaichuang":"适宜开窗",
    "jinghuaqi":"关闭净化器",
    "cityid":"101120101",
    "city":"济南",
    "cityEn":"jinan",
    "country":"中国",
    "countryEn":"China"
}

可以简单的理解,Restful风格一种使用HTTP+JSON实现的提供一种对外API的方式。

  1. flask框架
    python是一种广受喜爱的语言,它有很多框架,开发效率极高。其中flask框架就是开发RESTful服务的典型。使用也非常简单。
    2.1 flask入门
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask

app = Flask(__name__)


@app.route('/GoogNight')
def goog_night():
    return "GoogNight!"


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=9090)

只需要执行下
[root@localhost pys]# python goodnight.py
就启动了一个http服务。
测试下,在浏览器地址栏输入http://x.x.x.x:9090/GoogNight,
就会显示:GoogNight!

2.2 工程化
接下来我们的接口可能越来越多,放到一个文件里不再能满足我们的需求了,那么我们可以使用Blueprint来把各个接口(函数/route)分布到各个文件中。
拼装字符串,python也有成熟的库,我们可以使用jsonify完成这部分工作。
再使用request解析请求参数。经过这些我们就,可以生成一个简单的web api服务。

server.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask, abort, request, jsonify
from get_task import get_task
from datas import tasks

app = Flask(__name__)
app.register_blueprint(get_task, url_prefix="/get_task/")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8383, debug=True)

数据

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 测试数据暂时存放
tasks = [{"id": 123, "info": "test task"}, {"id": 124, "info": "task 22"}]

实现接口

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask, abort, request, jsonify
from flask import Blueprint
from datas import tasks

get_task = Blueprint('get_task', __name__)


@get_task.route('/get', methods=['GET'])
def get_tasks():
    if not request.args or 'id' not in request.args:
        # 没有指定id则返回全部
        return jsonify(tasks)
    else:
        return  jsonify({'result': 'not found'})


@get_task.route('/post', methods=['POST'])
def get_tasks_():
    if not request.args or 'id' not in request.args:
        return jsonify(tasks)
    else:
        return  jsonify({'result': 'not found'})

2.3 可能会出现CORS问题,解决方法如下,在python脚本中添加如下代码

from flask_cors import CORS
CORS(get_task, supports_credentials=True)
测试

http://x.x.x.x:8383/get_task/get
outputs

[
  {
    "id": 123, 
    "info": "test task"
  }, 
  {
    "id": 124, 
    "info": "task 22"
  }
]

[root@localhost ~]# curl -H “Content-Type: application/json” -X POST “http://127.0.0.1:8383/get_task/post”

[
  {
    "id": 123, 
    "info": "test task"
  }, 
  {
    "id": 124, 
    "info": "task 22"
  }
]

本文简略的介绍了使用flask框架搭建restful服务的过程,文中的例子都是可运行。更多细节,可参考它们的官网介绍。

你可能感兴趣的:(006-工具使用,flask,blueprint,restful,web服务器)