API接口简单使用(一):Python中使用Flask封装网络接口

一、概述

记录时间 [2024-4-2]

本文讲述的是API接口的简单使用:在Python中使用Flask封装网络接口,可以通过调用API接口,实现请求参数/文件的上传,以及自定义文本/JSON格式/图片等的返回。


1. HTTP请求


HTTP请求是指从客户端到服务器端的请求消息,包括请求行、头部和体,流程为客户端发送请求,服务器处理并返回响应


常见的HTTP请求有:

序号方法描述
1GET用于请求服务器上的资源,不会对服务器资源产生任何影响。
2POST向服务器发送数据,例如登录、上传文件等,会让服务器进行处理,并对服务器资源产生影响。
3PUT从客户端向服务器传送的数据取代指定的文档的内容。
4DELETE请求服务器删除指定的页面。

2. API


API(Application Programming Interface),即”应用程序编程接口“,是一组预先定义的函数,允许应用程序和开发人员基于软件或硬件访问一组例程,而无需访问源代码或理解内部工作机制的细节


3. Flask


Flask是一个使用Python编写的轻量级Web应用框架,较其他同类型框架更为灵活、轻便、安全且容易上手。

Flask的基本模式为:在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上。

但,相比于一些大型框架如DjangoFlask的功能相对较少,需要依赖扩展库来实现一些功能。缺乏一些高级功能,不适合大型应用。

这里附带上Flask官方文档,里面记载了详细的使用方法,如果觉得看文档比较麻烦的话,可以直接看文章,需要用到的部分已经在文章中进行了摘录。


二、封装简单的网络接口


1. 使用PyCharm创建Python项目


如图所示,打开PyCharm,点击左上角的File,然后New Project,新建一个Python项目。

  • 选择项目安装的位置,pythonProject是我们的Project放置的位置,需要是一个空文件夹
  • 选择解释器Python Interpreter。文中选择的是先前安装的conda中附带的,你也可以选择新建(选上面的New environment即可)。
  • 点击Create,完成创建。创建过程需要下载一些配置,耐心等待下即可。

在这里插入图片描述


2. 新建测试文件


点击pythonProject,右键新建Python文件,命名为flaskTest


在这里插入图片描述


3. 构建Flask实例


flaskTest.py中编写一个简单的测试实例,然后右键运行Run

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

查看反馈,可以看出项目运行在主机的5000端口

 # 可以看出项目运行在主机的5000端口
 
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Serving Flask app 'flaskTest'
 * Debug mode: off

打开浏览器查看一下吧。

访问127.0.0.1:5000这个URL时,就会得到程序返回的Hello World!

在这里插入图片描述


4. 实例详解


接下来我们对这个Flask实例进行详解:


# Flask是使用Flask框架需要导入的依赖
from flask import Flask

# app是Flask构建的实例
app = Flask(__name__)

# @app.route('/')

# 这里定义了HTTP请求的方式,如 GET/POST... 默认为GET请求
# 我们也可以自定义请求方式,如 @app.post('/')

# ('/')中 / 代表请求的URL路径,此时浏览器中访问路径为 127.0.0.1:5000
# ('/hello') 此时浏览器中访问路径为 127.0.0.1:5000/hello

@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'

# def为python中定义的函数
# hello_world()是函数名
# return后面的即为HTTP请求返回的结果


if __name__ == '__main__':
    app.run()

# app.run() 运行这个实例
# 默认本机访问,默认5000端口
# 我们可以进行自定义
# 如 app.run(host='0.0.0.0', port=5001)
# '0.0.0.0'表示允许全部主机访问,port=5001 指定端口为5001

三、测试方式

在进行其他复杂的网络接口使用前,我们先对HTTP请求的几种测试方式进行简单介绍,方便后续使用。


1. 浏览器直接方式


浏览器直接方式是最方便的,只要输入网址,也就是请求的URL即可。

但是,它只能发送GET请求。

回到我们上面的测试界面,在浏览器中按下F12键(部分电脑可能是FN+F12)调出开发工具,这对于网页开发和调试非常有用


2. Postman


Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果。

Postman能够发送任何类型的 HTTP请求 (GET, HEAD, POST, PUT…),且可以附带各种类型的参数和请求头。

感兴趣的朋友可以点击这里,进行下载安装。


3. HTML


我们也可以写一个简单的HTML文件来发送HTTP请求。

具体的方式是新建一个test.html文件,然后以记事本方式打开,然后进行编写。

例如:

<html>

<head>
	<title>HTTP请求测试</title>

</head>

<body>
    <!--action中写入请求的URL-->
    <!--method中写入请求的方法,如 get/post...-->
    
	<form action="http://127.0.0.1:5000" method="get" enctype="multipart/form-data">
        
		<input type="submit" value="测试">
	
	</form>

</body>

</html>

然后保存文件,双击在浏览器中运行,点击测试即可。


四、其他复杂的网络接口


1. 请求参数传递


创建方法


上文创建的Flask实例中,我们返回的是简单的文本,接下来我们实现下参数传递。

在发送HTTP请求时带上参数,并将自定义的参数返回给客户端。

# 在flaskTest.py中编写一个新的函数

@app.route('/text/<id>')
def text(id):
    return "hello %s" % id

浏览器中测试


我们首先在浏览器中测试

按下F12键(部分电脑可能是FN+F12)调出开发工具

输入网址,输入的格式:

ip地址:端口号/请求路径/待传参数
http://127.0.0.1:5000/text/test

按下回车,我们就能得到服务端返回的结果,其中,test就是我们刚刚传入的参数。

hello test

在这里插入图片描述


在开发工具中选择网络,点击test进行查看(没有就刷新一下),可以看到这个请求的详细信息,如请求网址/方法/状态等等。


在这里插入图片描述


Postman测试


打开刚刚下载的Postman,选择GET方法,输入URL和参数,然后点击Send,就能得到返回结果。


在这里插入图片描述


2. JSON格式返回


编写/运行Flask实例


接下来我们实现JSON格式数据返回的接口。

创建flaskJSON.py文件,编写Flask实例:

from flask import Flask,jsonify

app = Flask(__name__)

# json数据返回接口

@app.route('/json')
def return_json():
    data = [{'msg':'This is a json TEST'},{'msg1':'This is a json TEST111'}]
    return jsonify(data)


if __name__ == '__main__':
    app.run()

运行,然后进行请求测试(浏览器/Postman均可):

http://127.0.0.1:5000/json

在Postman中查看结果

在这里插入图片描述


在浏览器中查看结果


在这里插入图片描述


3. 图片形式返回


编写/运行Flask实例


接下来我们实现图片形式返回的接口。

创建flaskImage.py文件,编写Flask实例:

from flask import Flask,send_file

app = Flask(__name__)

# 图片返回接口
@app.route('/image')
def return_image():
    image_path = 'yfx.jpg'
    return send_file(image_path, mimetype='image/jpeg')


if __name__ == '__main__':
    app.run()

进行测试

运行,然后进行请求测试(浏览器/Postman均可):

http://127.0.0.1:5000/image

查看结果(图片来自网络,仅用于测试查看):


在这里插入图片描述


五、总结


本文描述了在Python中使用Flask框架封装API接口的方法。通过实践操作,分别实现了简单文本返回接口、参数传递、JSON格式数据返回接口,以及图片返回接口。此外,文章还简单介绍了浏览器开发工具的使用,测试工具Postman的使用。

文中对操作过程的描述详细具体,便于初学者进行使用。关于文件上传的接口编写将在下一篇中实现。


一些参考资料

Flask官方文档:https://dormousehole.readthedocs.io/en/latest/quickstart.html

Postman官网:https://www.postman.com/

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Flask是一个基于Python的轻量级Web开发框架,可用于将yolo图像识别模型封装为Restful API。 首先,需要安装Flask框架和相关依赖项,包括numpy、opencv和yolo模型本身。接着,可以根据自己的需求编写一个Flask app,其包括以下主要功能: 1. 获得图像的URL或二进制数据 2. 调用预先加载的yolo模型 3. 处理yolo模型的输出结果 4. 将结果返回到客户端 为了优化API的性能,可以考虑以异步的方式调用yolo模型。可以使用Python的协程库(例如asyncio),或使用基于消息传递的工具(例如RabbitMQ),以异步方式处理多个模型调用请求。 最后,为方便客户端开发使用API,可以提供文档和示例代码。可以使用Swagger或YAML等工具编写API文档,并提供基于不同编程语言的示例代码(例如Python、Java、JavaScript和C#等)。 综上所述,使用Flask将yolo图像识别模型封装为Restful API是一项相对容易实现的任务,但需要深入了解Flask框架、yolo模型和API设计。 ### 回答2: Flask是一个基于Python的web应用程序框架,适用于快速开发Python web应用程序。Yolo是一种对象检测的算法,可以在一张图像检测出对象的位置和所属类别。将Yolo图像识别模型封装为Restful API意味着可以通过网络API进行远程调用,将图像输入模型进行识别,并获得相应的识别结果。 在将Yolo模型封装为Restful API时,需要先写一个Flask应用程序。然后,将已经训练好的Yolo模型导入到应用程序。接下来,根据需要定义一个或多个RESTful API端点,并使其可以响应来自客户端的HTTP请求。在这些API端点使用图像识别模型对输入图片进行识别,然后把输出结果返回给客户端。 具体来说,为了能够在Flask应用程序使用Yolo模型进行图像识别,需要将模型导入至Python的代码,并使用OpenCV或其他图像处理库对输入图片进行预处理。同时,要配置好Flask路由,定义API端点路径,并访问到模型去进行识别操作。 总结而言,将Yolo图像识别模型封装为Restful API的过程需要深入掌握Python语言Flask框架的开发,同时也需要对图像识别领域有一定的了解。此外,在实现过程,需要保证模型能够高效地进行识别,并考虑到PythonFlask的性能问题。 ### 回答3: 在使用Flask将YOLO图像识别模型封装为RESTful API之前,需要进行以下步骤: 1.准备YOLO模型:首先,需要准备好YOLO模型。可以使用现有的预训练模型或根据自己的需要训练模型。 2.安装Flask和相关库:在使用Flask构建RESTful API之前,需要安装Flask和与之相关的库,例如flask-restful,flask-cors等。 3.编写Flask应用程序:编写Flask应用程序包括定义API端点,配置数据传输格式,处理请求和返回结果等。 具体步骤如下: 1.定义API端点:在Flask应用程序定义API端点是相当简单的,只需使用Flask的route装饰器和HTTP方法即可定义RESTful API。例如,可以使用POST方法将图像上传到服务器。 @app.route('/predict', methods=['POST']) def predict(): # 接收传输的图像 file = request.files['image'] image = Image.open(file.stream) # 调用模型进行预测 result = yolo_model.predict(image) # 返回预测结果 return jsonify(result) 2.配置数据传输格式:为了方便客户端和服务器端之间的数据传输,需要配置数据传输格式。使用json格式是比较常见的,可以使用Flask的jsonify函数轻松地将结果转换为json格式。 3.处理请求和返回结果:可以使用Flask的request对象获取传输的数据,使用jsonify函数返回结果。 通过以上步骤,可以将YOLO图像识别模型封装为RESTful API并实现图像识别功能。客户端可以通过发送Post请求并传输图像数据,服务器端进行预测,并返回结果。这种方式可以很方便地实现模型的部署和使用,提高应用程序的可扩展性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值