API调用的方式触发程序的调用
一个新的坑
我之前不是写了个查询ftp文件的程序么,费死劲写完了。
但是现实是,你没办法让一个不会用python的人,电脑没装python环境的人,去用它。
当然也可以教他,但是吧,没啥太大的意义。毕竟他们的需要就是查个文件而已。
所以我想了想,怎么能让他们很方便的去查呢……
……
所以,就弄了个api接口出来……
通过get方法,给传参,传参就是要查的文件名字。这样用的人只需要打开浏览器,拼好一个url,直接访问就好了。
当然,这只解决了查的问题,文件还是要返回给他们的。
你不能让他们api调用了,一直等返回。文件如果找了一个小时,不可能网页转1个小时的。
……
所以,做第二个api接口出来……
Get方法,传参为之前去搜的文件。这次是去检查之前查询的结构,如果找到了,就把文件通过前端网页给出来;没找到提示文件不存在;没找完,提示还在找。
……
好像可以了呢😌
又给自己搞了个坑去研究了呢。
技术实现
查了查,Flask
框架可以实现轻量级的web功能,做简单的rest接口。挺适合的。
又不小心要研究下新东西了。
因为我又不是前端开发,具体的flask用法,我还真的没想去系统的学习,网上找了示例学习了下,大概知道api接口怎么定义的规则了。掌握需要的实用技巧就可以了。
样例示例
1 | # 返回声明 |
其实还是挺简单的,
就是不同的api方法,定义不同的装饰器,然后启用后,通过装饰器定义的不同地址,进行web调用就好了。
app.run(host='0.0.0.0', port=8070, debug=False, threaded=True)
这个启动的函数,参数部分,可以自定义host、port,是否多并发等。
一个问题
正常情况下,一次api调用,是一个请求Request,返回一个响应Response。
响应给到调用的客户端后,这个api方法就结束了。
那么问题就来了,如果按照常规的逻辑写法,
客户端调用api,传入request,然后程序开始执行。我是使用了之前写好的遍历FTP的程序,所以就是调用该支程序。
程序遍历FTP找文件,可能要找几个小时,找到后该程序结束。然后api方法返回response。
这一个过程下来,客户端一直等待很不现实。
我们需要的其实就是,客户端一个request进来,触发遍历程序开始执行就好了。所以最好的设计是,request进来,触发遍历程序执行,就返回response出去。
查了下资料,使用response.call_on_close
函数就好了。
所以上面代码部分的逻辑,就是这个的用法。
示例
最后的效果:
嘿嘿嘿,反正是我自己做的东西,我就加了点彩蛋进去~
搞个api好好玩~
🤪🤪🤪🤪🤪🤪🤪