实习结帖(flask加上AIGC实现设计符合OpenAPI要求的OpenAPI Schema,让AIGC运行时可以调用api,协助公司门后迁移新后端等)

终于,笔者的实习生活也要告一段落了,最后的几天都在忙着和公司做AIGC的项目,在搞api的设计以及公司门户网站的迁移。

牛马搬运工(牛马了3天)

先说这个门户网站的迁移,我原本以为只是换个后端(若依),数据库改改就能用,结果居然是换一个服务器,那就寄了,更寄的是,在转移新闻数据的时候,时间跨度大(20年初),结果就是新闻里面的图片采用的保存技术不同!

DataURIscheme

DataURIscheme是一种将小数据直接嵌入网页中的技术,减少HTTP请求,提高页面加载速度。(案例转载从https://blog.csdn.net/bbc2005/article/details/73369893

例如你有一个图片,希望在前端展示,而他可能需要通过以下这种方式获取

这就是http URI scheme

<img src="http://sjolzy.cn/images/A.jpg"/>

Data URI scheme是将http转为base64

以下这种方式就是Data URI scheme

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC" />

它把一些 8-bit 数据翻译成标准 ASCII 字符,虽然人看不懂了,但是

base64编码把图片文件增加了1/3,Data URI和MHTML同时使用相当于增加了2/3,但CSS和JavaScript可以使用gzip压缩,其可以节省2/3的数据量,所以使用gzip压缩后的最终数据量是(1 + 1/3) * 2 * (1/3) = 8/9,所以最终流量是减少的。还能减少请求数节约大量的时间。

而通过全选复制下的新闻内容包括了其中的富文本内容,也就导致复制的图片呈现的是base64的字符串,并且他不是一个图片文件,而是链接,一旦弃用原数据库图片就就地升天,这个问题的发现是在转移过程中出现了。

Error updating database. Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable. ### The error may exist in com/xuanyuan/portal/mapper/PortalInformationMapper.java (best guess) ### The error may involve com.xuanyuan.portal.mapper.PortalInformationMapper.insert-Inline ### The error occurred while setting parameters ### SQL: INSERT INTO portal_information ( information_id, title, cover, content, status, type, sort, create_by, create_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? ) ### Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable. ; Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.; nested exception is com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (6,066,082 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.

后端数据库塞不进去了,数据太长了,query不足,虽然可以调整mysql策略解决,当问题是导入的图片仅仅是链接而不是本体。以下为同一种图片两种情况的存储,可以发现小图片base64塞满了数据且比原图片还大。

不转码保存但是网页协议落后

一般来说,网络协议落后也没有什么问题,但是http协议加载不出图片,需要改为https才能访问图片,不过很好的是出问题的这些不再是转base64保存,不用看哪些又臭又长的链接,但是原门户网站只能通过http访问,想要图片则必须将图片新开标签自己在前面加上https,只能说这实在是太折磨了而且不同后端存储的设置也不一样,转图片在改一样不方便。就这样这三天我感觉我都要得腱鞘炎了,我有没有工伤我不知道,但是我的鼠标倒是今创业未半而中道崩殂了。

利用flask搭建后端,设计功能开放api给AIGC使用

这个东西如果你们想尝试,可以去看看文擎毕昇或其他的AIGC平台,对应的就是工具这一块,我们需要实现的,就是设计了flask(python的一个框架)的各个路由分支,和他的功能实现就好了,下面是一个获取系统的运行时长的案例。(注意:理论上api的调用需要使用域名,理论上使用网络隧穿可能是一种无合法域名的实现方式之一,当然如果你是本地部署的,那直接localhost:端口也没问题)

python 复制代码
1.	from flask import Flask, jsonify
2.	import time
3.	
4.	app = Flask(__name__)
5.	
6.	start_time = time.time()
7.	
8.	@app.route('/uptime', methods=['GET'])
9.	def get_uptime():
10.	    uptime_seconds = time.time() - start_time
11.	    return jsonify({'uptime': uptime_seconds})
12.	
13.	if __name__ == '__main__':
14.	    app.run(debug=True)

这是与其对应的OpenAPI Schema。

python 复制代码
1.	{
2.	  "openapi": "3.1.0",
3.	  "info": {
4.	    "title": "Uptime API",
5.	    "description": "API to check the server uptime",
6.	    "version": "v1.0.0"
7.	  },
8.	  "servers": [
9.	    {
10.	      "url": "http://localhost:5000"
11.	    }
12.	  ],
13.	  "paths": {
14.	    "/uptime": {
15.	      "get": {
16.	        "summary": "Get Uptime",
17.	        "description": "Returns the uptime of the server in seconds.",
18.	        "operationId": "getUptime",
19.	        "responses": {
20.	          "200": {
21.	            "description": "Uptime in seconds",
22.	            "content": {
23.	              "application/json": {
24.	                "schema": {
25.	                  "type": "object",
26.	                  "properties": {
27.	                    "uptime": {
28.	                      "type": "number",
29.	                      "description": "Uptime in seconds"
30.	                    }
31.	                  }
32.	                }
33.	              }
34.	            }
35.	          }
36.	        }
37.	      }
38.	    }
39.	  },
40.	  "components": {
41.	    "schemas": {}
42.	  }
43.	}
44.	

输入的OpenAPI Schema支持json和yaml两种常见格式,都需要满足openapi格式,什么,你不会写,这都ai时代了个,找大语言模型跑一下,或者拿AIGC试着做一个小助手都可以啊!为了保证api的实现唯一接口,需要为每一个操作提供opreationID,人工智能将会自动解析对应需求,在实际应用中将会自动设计数据包发送给后端。

说起网络隧穿,就想起了以前高中大学的时候搞这个,一个为了mc联机,一个为了去教室拿ipad玩电脑。现在呢,真的感慨时间流逝真快,变化之大,以前网络隧穿效果其实并不好(远程连接),而现在mumu出了一个gamevivewer能更好的远程控制,还能电脑多开桌面,手机控制后台的桌面,当然我用这个只是为了上课签到。。。。早八打开远程定位打卡。

这个隧穿也陪伴了我好久。

结语

整个实习我接触了很多新东西,不仅是技术上的,与人处事人际交往也是如此,很多时候纸上得来终觉浅绝知此事要躬行,也是一句真理,回过头才发现,不知不觉就实习了这么长的时间,也有些感慨,大四了,也快毕业了,那以后的人生,也差不多开始完全靠自己书写了。

估计高中那时的我们都没能想象到今天是怎么样的,没想过人工智能这么强大,没想过qq宠物也有一天会离我们远去,没想过高中电脑课学的VB到今天已经是半截入土的,没想过flash也会收费,未来到底是怎么样的呢,现在的我倒也有点感到伤感,感觉一天一天和时代脱轨,未来到底是怎么样的,希望是美好的吧,也希望每一年也能告诉自己,一年过去了,我也有了新变化,也有了成长吧。

相关推荐
sg_knight4 分钟前
VSCode如何修改默认扩展路径和用户文件夹目录到D盘
前端·ide·vscode·编辑器·web
一个处女座的程序猿O(∩_∩)O14 分钟前
完成第一个 Vue3.2 项目后,这是我的技术总结
前端·vue.js
mubeibeinv15 分钟前
项目搭建+图片(添加+图片)
java·服务器·前端
逆旅行天涯21 分钟前
【Threejs】从零开始(六)--GUI调试开发3D效果
前端·javascript·3d
m0_7482552642 分钟前
easyExcel导出大数据量EXCEL文件,前端实现进度条或者遮罩层
前端·excel
web147862107231 小时前
C# .Net Web 路由相关配置
前端·c#·.net
m0_748247801 小时前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
飞的肖1 小时前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
青灯文案11 小时前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
m0_748254882 小时前
DataX3.0+DataX-Web部署分布式可视化ETL系统
前端·分布式·etl