当前位置: 首页 > article >正文

使用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&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)



http://www.kler.cn/a/471611.html

相关文章:

  • .NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人
  • Linux 正则表达式 ⑪
  • NOVA:AutoRegressive Video Generation Without Vector Quantization——自回归视频生成无需向量量化
  • Clickhouse集群部署(3分片1副本)
  • STM32 I2C通信外设
  • CSS 学习之正确看待 CSS 世界里的 margin 合并
  • 使用Python实现医疗物联网设备:构建高效医疗监测系统
  • 快速排序进阶版(加入插入排序提高其性能)
  • 【代码随想录】刷题记录(93)-无重叠区间
  • Requests-数据解析bs4+xpath
  • UWB实操:用信号分析仪(频谱分析仪)抓取UWB频域的图像
  • 【JMeter】多接口关联
  • es 3期 第22节-Bucket特殊分桶聚合实战
  • 【往届已EI检索】第五届智慧城市工程与公共交通国际学术会议(SCEPT 2025)
  • 在 PhpStorm 中配置命令行直接运行 PHP 的步骤
  • 后端开发入门超完整速成路线(算法篇)
  • 计算机网络:无线网络
  • 矩阵和向量点乘叉乘元素乘
  • ue5 替换角色的骨骼网格体和动画蓝图
  • 计算机网络之---计算机网络的性能评估
  • Redis中的主从/Redis八股
  • 信息安全:Java自定义Jackson序列化器进行数据脱敏
  • 如何在新窗口打开pdf文件,并修改网页标题
  • 【前端系列02】Pinia状态管理库
  • 回归预测 | MATLAB实现CNN-SVM多输入单输出回归预测
  • 云打印之快手打印组件交互协议