提到API 開發,你可能會想到Django REST Framework,Flask,FastAPI,沒錯,它們完全可以用來寫API,不過,今天分享的這個框架可以讓你更快把現有的函數轉化為API,它就是Sanic。
Sanic[1],是 Python3.7 Web 伺服器和 Web 框架,旨在提高效能。它允許使用 Python3.5 中添加的 async/await 語法,這可以有效避免阻塞從而達到提升響應速度的目的。 Sanic致力於提供一種簡單且快速,集創建和啟動於一體的方法,來實現一個易於修改和拓展的HTTP 服務,Sanic 具備開箱即用的功能,它可以用於編寫,部署和擴展生產級Web 應用程式。目前 Github 有 16.3k 的星星,有廣泛的社區支持。
有以下特性:
現在讓我們看,如何將程式碼轉換成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 程式碼變成 API的詳細內容。更多資訊請關注PHP中文網其他相關文章!