偶然一次机会看见了国外大神写的Flask框架关于restful api的介绍,链接在此点击打开链接
不得不说,本人最近也在做服务器框架搭建,一直搞不懂,我需要的服务器不需要界面,也就是不需要html解析,也就没有了flask中的render_tempeter这个东东。后来看见这篇文章,感觉特别好,但学完还是有一个疑问,怎么用restful来传输图片,知道将二进制流通过base64转化,但还是不知怎么弄。正在努力学习中。。。
现在讲学习restful api的过程记录下来。
在此之前,http各种请求方式我就不说了。
如链接文章所说,请求方式为:
http://[hostname]/todo/api/v1.0/
<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的介绍。
<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>
<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
from flask import make_response @app.errorhandler(404) def not_found(error): return make_response(jsonify({'error': 'Not found'}), 404)
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
希望有朋友如果能够解答上面的问题,能够给我留言,谢谢!