0、写在前面
做微信公众号发现基本就是对接口,所以自己实现一下Restful-api来加深下理解
通过这个可以实现前后端的分离
前端是独立的web,比如vue,专注于页面表现,数据通过接口(json/xml)从后端获取
后端是独立的web,比如flask,专注与逻辑和数据的操作,可以和众多前端交互,前端可以是网站、客户端、移动端都可
前后端理论上约定好即可,不一定要按照常规的规范
一切皆资源
1、flask框架实现
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 # -*- coding: utf-8 -*- 2 from flask import Flask 3 from flask_restful import reqparse, abort, Api, Resource 4 5 app = Flask(__name__) 6 api = Api(app) 7 8 #一个字典,代表数据 9 class1 = { 10 '001':{ 'name':'张','age':11 }, 11 '002':{ 'name':'王','age':12 }, 12 '003':{ 'name':'李','age':13 } 13 } 14 15 16 def get_class_id(id): 17 if not str(id) in class1: 18 abort(404, message="id(%s) is not found"%(id)) 19 20 #资源组的增查,对应get,post 21 class TaskListAPI(Resource): 22 def __init__(self): 23 self.reqparse = reqparse.RequestParser() 24 self.reqparse.add_argument('id',type=dict, required = True, 25 help = "pleas return json", location = 'json') 26 super(TaskListAPI, self).__init__() 27 28 def get(self): 29 return class1 30 31 def post(self): 32 task = self.reqparse.parse_args()['id'] 33 class1.update(task) 34 return task 35 36 37 #单一资源组的删改查,对应delete,put,get 38 class TaskAPI(Resource): 39 def __init__(self): 40 self.reqparse = reqparse.RequestParser() 41 self.reqparse.add_argument('name', type = str, required = True, 42 help = 'name required', location = 'json') 43 self.reqparse.add_argument('age', type = int, default = 10, location = 'json') 44 super(TaskAPI, self).__init__() 45 46 def get(self, id): 47 get_class_id(id) 48 return class1[id] 49 50 def put(self, id): 51 get_class_id(id) 52 name= self.reqparse.parse_args()['name'] 53 age = self.reqparse.parse_args()['age'] 54 task = { 'name':name,'age':age } 55 class1[id] = task 56 return task,201 57 58 def delete(self, id): 59 get_class_id(id) 60 task = class1[id] 61 del class1[id] 62 return task,204 63 64 api.add_resource(TaskListAPI, '/todo/api/v1.0/tasks', endpoint = 'tasks') 65 api.add_resource(TaskAPI, '/todo/api/v1.0/tasks/<id>', endpoint = 'task') 66 67 if __name__ == '__main__': 68 app.run(debug=True)