使用python将自己的程序封装成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&param2=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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值