如何快速把你的 Python 代码变为 API
共 4003字,需浏览 9分钟
·
2022-08-29 10:21
# Sanic 简介
Sanic[1],是 Python3.7+ Web 服务器和 Web 框架,旨在提高性能。它允许使用 Python3.5 中添加的 async/await 语法,这可以有效避免阻塞从而达到提升响应速度的目的。Sanic致力于提供一种简单且快速,集创建和启动于一体的方法,来实现一个易于修改和拓展的 HTTP 服务,Sanic 具备开箱即用的功能,它可以用于编写,部署和扩展生产级 Web 应用程序。目前 Github 有 16.3k 的星,有广泛的社区支持。
有以下特性:
内置极速 web server
生产准备就绪
极高的拓展性
支持 ASGI
简单直观的 API 设计
社区保障
# 如何将现有代码快速转化为 API
现在让我们看,如何将代码转为 API,假如有已经在 functions.py 写好的两个函数:
import datetime
def get_datetime():
return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def sum_x_y(x, y):
return x + y
转化为 API 只需再编写一个 sanic_app.py :
from sanic import Sanic, json
from functions import get_datetime, sum_x_y
app = Sanic("CodeToAPI")
HOST = "localhost"
PORT = 8000
@app.route("/getdatetime")
async def getdatetime(request):
return json({"now": get_datetime()})
@app.get('/sumxy')
async def sumxy(request):
parameters = request.args
result = sum_x_y(int(parameters['x'][0]), int(parameters['y'][0]))
return json({'result': result})
if __name__ == "__main__":
app.run(host=HOST, port=PORT, debug=False)
然后,只需要执行 python sanic_app.py 就可以启动 API 服务:
从运行结果可以得知,sanic 已经运行在生产环境模式,这与其他 Web 框架不同,其他框架带有一个内置的开发服务器,并明确表示它只用于开发。而 Sanic 的情况恰好相反,内置的服务器可以直接用于生产环境。
可以用 curl 进行接口测试:
❯ curl "http://localhost:8000/getdatetime"
{"now":"2022-07-25 06:34:25"}% ❯ curl "http://localhost:8000/sumxy?x=12&y=34"
{"result":46}%
如果用 post,且使用 json 传参,也是简单的:
@app.post('/sumxy')
async def sumxy(request):
parameters = request.json
print(parameters)
result = sum_x_y(int(parameters['x']), int(parameters['y']))
return json({'result': result})
curl 这样测试:
❯ curl -X 'POST' 'http://localhost:8000/sumxy' -H "Content-Type: application/json" -d '{"x":10,"y":20}'
{"result":30}%
# 部署在其他
Sanic 除了自带的服务器(大多数情况推荐自带的服务器用于生产),同样兼容 ASGI。这意味着您可以使用你喜欢的 ASGI 服务器来运行 Sanic。现在有三大主流的 ASGI 服务器, Daphne、Uvicorn (FastAPI 用的就是这个)、Hypercorn。
也可以部署在 Gunicorn:
gunicorn myapp:app --bind 0.0.0.0:1337 --worker-class sanic.worker.GunicornWorker
静态文件的处理,及记录请求访问日志,又想获得更好的性能,可以考虑使用 Nginx 作为代理,让 Nginx 来处理访问日志和静态文件,这种方式要比用 Python 处理快得多得多。
# 最后的话
本文分享了下一代的 Python Web 框架 Sanic,直接支持异步,且内置生产级别的 Web 服务器,可以说是编写 API 相当快的工具了,如果有帮助,还请点赞、在看、转发
推荐阅读:
入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
年度爆款文案
点阅读原文,看B站我的视频!