乐趣区

关于python:如何快速把你的-Python-代码变为-API

提到 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 相当快的工具了,

最近整顿了几百 G 的 Python 学习材料,蕴含新手入门电子书、教程、源码等等,收费分享给大家!想要的返回“Python 编程学习圈 ”,发送“J”即可收费取得

退出移动版