如何快速把你的 Python 代码变为 API

Python客栈

共 3259字,需浏览 7分钟

 ·

2022-08-29 10:59


提到 API 开发,你可能会想到 Django REST Framework,Flask,FastAPI,没错,它们完全可以用来编写 API,不过,今天分享的这个框架可以让你更快把现有的函数转化为 API,它就是 Sanic。

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 相当快的工具了,如果有帮助,还请点赞、在看、转发。

参考资料

[1]

Sanic: https://github.com/sanic-org/sanic


END

1、为什么不建议用 from xxx import *
2、2022 年 Python “十级”试题(全国卷A)-答案解析
3、13 个非常有用的 Python 代码片段,建议收藏!
4、推荐 GitHub 上的一套公开 API 接口,简直不要太全!
5、一首歌曲竟然导致WinXP崩溃?时隔近20年获得CVE官方漏洞编号

点击关注公众号,阅读更多精彩内容

浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报