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

开发 前端
Sanic,是 Python3.7+ Web 服务器和 Web 框架,旨在提高性能。它允许使用 Python3.5 中添加的 async/await 语法,这可以有效避免阻塞从而达到提升响应速度的目的。

提到 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七号
相关推荐

2021-11-17 21:58:02

Python编程语言

2011-03-04 14:39:32

Vsftpd启动xinetd

2024-07-18 12:41:49

2023-03-31 08:25:08

零代码开源项目

2020-04-20 11:09:18

Python开发语言

2024-08-13 08:56:22

2013-03-25 09:41:20

PythonCython

2012-06-18 15:18:32

JS

2022-09-04 15:54:10

Node.jsAPI技巧

2018-07-19 16:50:53

2023-09-04 10:10:47

插件页面元素

2020-07-07 10:55:01

C++C语言代码

2024-05-23 11:26:02

2018-03-30 10:02:08

代码规范维护工程师

2017-06-28 16:18:22

编程程序员开发

2020-01-06 15:00:43

Linux电脑发行版

2022-05-29 12:57:32

GNOMEUbuntu桌面

2012-03-12 09:33:04

JavaScript

2020-07-23 14:15:42

Cython的Python代码

2021-04-27 06:44:03

PythonCython编程语言
点赞
收藏

51CTO技术栈公众号