本文将详细介绍使用 Python 编写 REST API 的方法和步骤。
一、准备工作
在开始编写 REST API 之前,我们需要准备以下工作:
1. 安装 Flask 框架
pip install Flask
2. 安装 Flask-RESTful 扩展
pip install flask-restful
3. 安装 Flask-JWT 扩展
pip install flask-jwt
二、编写 REST API
1. 设置 Flask 应用
首先,我们需要在 Python 中创建一个 Flask 应用。下面是一个简单的 Hello World 程序:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
这个应用将会在本地运行,并监听 5000 端口。在浏览器中访问 http://localhost:5000/
,可以看到 "Hello, World!"。
2. 添加 REST API 路由
接下来,我们需要添加 REST API 的路由。
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
app.run(debug=True)
这个应用中,我们首先创建了一个 api
对象,并将其与 Flask 应用绑定。然后,我们定义了一个 HelloWorld
类,继承自 Resource
,并实现 get()
方法,返回一个 JSON 数据。最后,我们使用 add_resource()
方法将路由添加到应用中,并指定路由路径。
在浏览器中输入 http://localhost:5000/
,可以看到返回的 JSON 数据:
{"hello": "world"}
3. 添加用户认证
对于一些敏感的 API,我们需要对用户进行认证验证。这里我们将使用 Flask-JWT 扩展。
from flask import Flask
from flask_restful import Resource, Api
from flask_jwt import JWT, jwt_required
app = Flask(__name__)
app.config['SECRET_KEY'] = 'super-secret'
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
class Secret(Resource):
@jwt_required()
def get(self):
return {'answer': 42}
api.add_resource(HelloWorld, '/')
api.add_resource(Secret, '/secret')
def authenticate(username, password):
if username == 'admin' and password == 'password':
return {'username': username}
return None
def identity(payload):
if payload['identity'] == 'admin':
return {'user_id': 1, 'username': 'admin'}
jwt = JWT(app, authenticate, identity)
if __name__ == '__main__':
app.run(debug=True)
在这个应用中,我们首先设置了一个应用密钥,用于在服务器端存储和验证用户身份信息。然后,我们添加了一个 Secret
类,使用 @jwt_required()
进行用户验证,只有当用户认证通过才能访问。
我们还编写了一个 authenticate()
函数,用于验证用户的账号和密码。如果验证通过,返回一个字典;否则,返回 None
。我们还编写了一个 identity()
函数,用于获取用户信息。
在浏览器中访问 /secret
,可以看到输出:
{"answer": 42}
但是在访问 /secret
时,需要携带 token,可以通过访问 /auth
获得 token:
curl -H "Content-Type: application/json" -X POST -d '{"username":"admin","password":"password"}' http://localhost:5000/auth
输出:
{"access_token":"...","refresh_token":"..."}
然后,在访问 /secret
时,需要设置请求头为:
Authorization: JWT {access_token}
其中,{access_token}
指的是上面获取到的 access_token。
三、总结
以上就是使用 Python 编写 REST API 的方法和步骤。通过 Flask 框架和 Flask-RESTful 扩展,我们可以非常快速地构建出一个功能完备、安全可靠的 API 应用。