首頁  >  文章  >  後端開發  >  如何快速地把你的 Python 程式碼變成 API

如何快速地把你的 Python 程式碼變成 API

PHPz
PHPz轉載
2023-04-14 18:28:102026瀏覽

提到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 服務:

如何快速地把你的 Python 程式碼變成 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 程式碼變成 API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除