Flask-restful API演示

Flask-restful API演示

    偶然一次机会看见了国外大神写的Flask框架关于restful api的介绍,链接在此点击打开链接

不得不说,本人最近也在做服务器框架搭建,一直搞不懂,我需要的服务器不需要界面,也就是不需要html解析,也就没有了flask中的render_tempeter这个东东。后来看见这篇文章,感觉特别好,但学完还是有一个疑问,怎么用restful来传输图片,知道将二进制流通过base64转化,但还是不知怎么弄。正在努力学习中。。。


    现在讲学习restful api的过程记录下来。

在此之前,http各种请求方式我就不说了。

如链接文章所说,请求方式为:

http://[hostname]/todo/api/v1.0/

    1.首先搭建简单的flask服务器叫app.py:

<span style="font-size:14px;">#!flask/bin/python
from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run(debug=True)</span>
这样我们就可以打开浏览器观察浏览器上的内容了。等等,不是说好的不用界面的吗?别着急,下面正式进入RASTful的介绍。

    2.搭建RASTful API服务器

<span style="font-size:14px;">#!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)</span>

    这时,我们就可以使用curl这个工具来测试

<span style="font-size:14px;">curl -i http://localhost:5000/todo/api/v1.0/tasks</span>

但我们不需要获得整个内容啊,于是我们可以添加参数

<span style="font-size:14px;">from flask import abort

@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = [task for task in tasks if task['id'] == task_id]
    if len(task) == 0:
        abort(404)
    return jsonify({'task': task[0]})</span>
这里就可以看出来了,在路由选择的时候,添加参数,但如果是二进制呢,参数怎么弄呢?

我们使用下面的命令测试一下:

curl -i http://localhost:5000/todo/api/v1.0/tasks/2

如果发现404资源没有找到,我们使用下面的代码友好化:

from flask import make_response

@app.errorhandler(404)
def not_found(error):
    return make_response(jsonify({'error': 'Not found'}), 404)

    重点来了,使用post来更新服务器:
from flask import request

@app.route('/todo/api/v1.0/tasks', methods=['POST'])
def create_task():
    if not request.json or not 'title' in request.json:
        abort(400)
    task = {
        'id': tasks[-1]['id'] + 1,
        'title': request.json['title'],
        'description': request.json.get('description', ""),
        'done': False
    }
    tasks.append(task)
    return jsonify({'task': task}), 201

测试一下:
curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://localhost:5000/todo/api/v1.0/tasks

到此为止,整个代码已经全部弄好。

希望有朋友如果能够解答上面的问题,能够给我留言,谢谢!



你可能感兴趣的:(Flask-restful API演示)