使用python将自己的程序封装成API
目录
- 基于flask模块
- 1、封装成GET方式调用的API:
- 2、封装成POST方式调用的API:
- 基于fastapi模块
- 1、封装为GET方式调用的API
- 2、封装为POST方式调用的API
- 3、自动生成的API文档
基于flask模块
安装完成flask模块:
pip install flask
1、封装成GET方式调用的API:
from flask import Flask, request, jsonify
# 创建flask应用示例,__name__表示当前模块名称
app = Flask(__name__)
def add_number(a, b):
return a+b
# 确定被调用的路由以及使用的http方法
@app.route('/apiTest/v1', methods = ['GET'])
def apiTest(): # 定义调用API时执行的函数
# 从url中获取参数
param1 = int(request.args.get('param1'))
param2 = int(request.args.get('param2'))
# 调用业务逻辑函数
result = add_number(param1, param2)
return jsonify({'result': result}) # 返回json格式的字符串
if __name__=="__main__":
# 运行flask服务
app.run(debug=True)
封装完成后,运行代码文件;
使用GET请求方式调用接口:
url = 'http://127.0.0.1:5000/apiTest/v1?param1=1¶m2=2'
r = requests.get(url)
print(r)
print(r.text)
2、封装成POST方式调用的API:
from flask import Flask, request, jsonify
app = Flask(__name__)
def add_number(a, b):
return a+b
# 确定使用的http方法为POST
@app.route('/apiTest/v1', methods = ['POST'])
def apiTest():
# 从请求中获取JSON数据。如果请求数据不是有效的JSON格式,该方法不会抛出异常,而是返回None(该方法中的silent=True参数决定的)
data = request.get_json()
param1 = data['param1']
param2 = data['param2']
result = add_number(param1, param2)
return jsonify({'result': result})
if __name__=="__main__":
app.run(debug=True)
上述POST接口的请求方式:
url = 'http://127.0.0.1:5000/apiTest/v1'
# 上述接口定义中获取参数使用的是get_json()方法,所以必须要在请求头headers中指定Content-Type,否则获取的参数为None
headers = {
'Content-Type': 'application/json'
}
r=requests.post(url, data=json.dumps({'param1':1, 'param2':2}), headers=headers)
print(r)
print(r.text)
基于fastapi模块
安装模块:
pip install fastapi
pip install uvicorn
1、封装为GET方式调用的API
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
a: int = None
b: int = None
@app.get('/test/a={a}/b={b}')
def calculate(a: int=None, b: int=None):
c = a + b
res = {"res":c}
return res
if __name__ == '__main__':
import uvicorn
uvicorn.run(app=app,
host="localhost",
port=8000,
workers=1)
使用GET请求方式调用接口:
url = 'http://localhost:8000/test/a=1/b=2'
r=requests.get(url)
print(r)
print(r.text)
2、封装为POST方式调用的API
下面示例中请求体参数是json数据格式。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
a: int = None
b: int = None
@app.post('/test')
def calculate(request_data: Item):
a = request_data.a
b = request_data.b
c = a + b
res = {"res":c}
return res
if __name__ == '__main__':
import uvicorn
uvicorn.run(app=app,
host="localhost",
port=8000,
workers=1 # 工作进程数
)
封装完成后,运行代码文件;
使用POST请求方式调用接口:
url = 'http://localhost:8000/test'
headers = {
'Content-Type': 'application/json'
}
r=requests.post(url, data=json.dumps({'a':1, 'b':2}), headers=headers)
print(r)
print(r.text)
3、自动生成的API文档
启动封装服务后,可以访问下面的网址查看API文档:
1、访问Swagger UI类型文档
http://localhost:8000/docs
2、访问openapi类型文档
http://localhost:8000/openapi.json
3、访问ReDoc类型文档
http://localhost:8000/redoc
```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9ac19550880b4916a52e99757ffdac48.png)