https://codeburst.io/this-is-how-easy-it-is-to-create-a-rest-api-8a25122ab1f3
Flask
Flask 是基于 Werkzeug 的微框架。
Installation
pip install flask-restful
安装 API 测试工具:
- Postman 提供测试 API 节点,探测响应,甚至可以创建脚本并执行自动化测试。
- Insomnia Postman 的开源替代品,具有基本的 API 节点测试,以及更好的 IMO 设计。
实现(Implementation)
我们来实现基本的 CRUD (Create, Read, Update, Delete) 功能,允许我们创建、获取、修改、删除用户。
首先导入模块并设置 Flask-Restful 应用:
from flask import Flask
from flask_restful import Api, Resource, reqparse
app = Flask(__name__)
api = Api(app)
接下来,我们创建一个数据列表和字典来模拟数据存储:
users = [
{"username": "admin",
"age": 22,
"occupation": "Network Engineer"},
{"username": "admin1",
"age": 32,
"occupation": "Doctor"},
{"username": "admin2",
"age": 42,
"occupation": "Web Engineer"}
]
现在,我们定义一个 User 资源类来开始创建我们的 API 节点:
class User(Resource):
def get(self, name):
pass
def post(self, name):
pass
def put(self, name):
pass
def delete(self, name):
pass
REST API 的高质量之一在于它遵循标准的HTTP方法来指示要执行的预期操作。
细化 get 方法:
class User(Resource):
def get(self, name):
for user in users:
if name == user["username"]:
return user, 200
return "User not found", 404
我们将遍历我们的用户列表来搜索用户,如果指定的名称与用户列表中的一个用户相匹配,我们将返回用户,同时返回200 OK,否则返回404找不到的用户找不到消息。精心设计的REST API的另一个特点是它使用标准的HTTP响应状态码来指示请求是否正在成功处理。
创建用户
def post(self, name):
parser = reqparse.RequestParser()
parser.add_argument("age")
parser.add_argument("occupation")
args = parser.parse_args()
for user in users:
if name == user["username"]:
return "User with name {} alreadly exists.".format(name), 400
user = {
"username": name,
"age": args["age"],
"occupation": args["occupation"]
}
users.append(user)
return user, 201
我们将使用前面导入的reqparse创建一个解析器,将年龄和职业参数添加到解析器中,然后将解析的参数存储在一个变量中,args(参数将以form-data,JSON或XML)。如果同名的用户已经存在,则API将返回一条消息和400个错误请求,否则我们将通过将用户附加到用户列表来创建用户,并返回用户以及201 Created。
修改用户
def put(self, name):
parser = reqparse.RequestParser()
parser.add_argument("age")
parser.add_argument("occupation")
args = parser.parse_args()
for user in users:
if name == user["username"]:
user["age"] = args["age"]
user["occupation"] = args["occupation"]
return user, 200
user = {
"name": name,
"age": args["age"],
"occupation": args["occupation"]
}
users.append(user)
return user, 201
删除用户
def delete(self, name):
global users
users = [user for user in users if user["username"] != name]
return "{} is deleted.".format(name), 200
最后,添加资源到路由中,并运行 Flask 应用。
api.add_resource(User, "/user/")
if __name__ == '__main__':
app.run(debug=True)
python app.py
现在我们就可以使用 Postman 或者 Insomnia 来测试了。