<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何快速把你的 Python 代碼變?yōu)?API

          共 3250字,需瀏覽 7分鐘

           ·

          2022-11-08 17:57

          ↑ 關(guān)注 + 星標(biāo) ,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包

          作者:somenzz
          來(lái)源:Python 七號(hào)

          閱讀本文大概需要 6 分鐘。



          提到 API 開(kāi)發(fā),你可能會(huì)想到 Django REST Framework,F(xiàn)lask,F(xiàn)astAPI,沒(méi)錯(cuò),它們完全可以用來(lái)編寫(xiě) API,不過(guò),今天分享的這個(gè)框架可以讓你更快把現(xiàn)有的函數(shù)轉(zhuǎn)化為 API,它就是 Sanic。

          Sanic 簡(jiǎn)介

          Sanic[1],是 Python3.7+ Web 服務(wù)器和 Web 框架,旨在提高性能。它允許使用 Python3.5 中添加的 async/await 語(yǔ)法,這可以有效避免阻塞從而達(dá)到提升響應(yīng)速度的目的。Sanic致力于提供一種簡(jiǎn)單且快速,集創(chuàng)建和啟動(dòng)于一體的方法,來(lái)實(shí)現(xiàn)一個(gè)易于修改和拓展的 HTTP 服務(wù),Sanic 具備開(kāi)箱即用的功能,它可以用于編寫(xiě),部署和擴(kuò)展生產(chǎn)級(jí) Web 應(yīng)用程序。目前 Github 有 16.3k 的星,有廣泛的社區(qū)支持。

          有以下特性:

          • 內(nèi)置極速 web server

          • 生產(chǎn)準(zhǔn)備就緒

          • 極高的拓展性

          • 支持 ASGI

          • 簡(jiǎn)單直觀(guān)的 API 設(shè)計(jì)

          • 社區(qū)保障

          如何將現(xiàn)有代碼快速轉(zhuǎn)化為 API

          現(xiàn)在讓我們看,如何將代碼轉(zhuǎn)為 API,假如有已經(jīng)在 functions.py 寫(xiě)好的兩個(gè)函數(shù):

          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

          轉(zhuǎn)化為 API 只需再編寫(xiě)一個(gè) 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)

          然后,只需要執(zhí)行 python sanic_app.py 就可以啟動(dòng) API 服務(wù):

          從運(yùn)行結(jié)果可以得知,sanic 已經(jīng)運(yùn)行在生產(chǎn)環(huán)境模式,這與其他 Web 框架不同,其他框架帶有一個(gè)內(nèi)置的開(kāi)發(fā)服務(wù)器,并明確表示它只用于開(kāi)發(fā)。而 Sanic 的情況恰好相反,內(nèi)置的服務(wù)器可以直接用于生產(chǎn)環(huán)境。

          可以用 curl 進(jìn)行接口測(cè)試:

          ? 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 傳參,也是簡(jiǎn)單的:

          @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 這樣測(cè)試:

          ? curl -X 'POST' 'http://localhost:8000/sumxy' -H "Content-Type: application/json" -d '{"x":10,"y":20}'
          {"result":30}%

          部署在其他

          Sanic 除了自帶的服務(wù)器(大多數(shù)情況推薦自帶的服務(wù)器用于生產(chǎn)),同樣兼容 ASGI。這意味著您可以使用你喜歡的 ASGI 服務(wù)器來(lái)運(yùn)行 Sanic。現(xiàn)在有三大主流的 ASGI 服務(wù)器, Daphne、Uvicorn (FastAPI 用的就是這個(gè))、Hypercorn。

          也可以部署在 Gunicorn:

          gunicorn myapp:app --bind 0.0.0.0:1337 --worker-class sanic.worker.GunicornWorker

          靜態(tài)文件的處理,及記錄請(qǐng)求訪(fǎng)問(wèn)日志,又想獲得更好的性能,可以考慮使用 Nginx 作為代理,讓 Nginx 來(lái)處理訪(fǎng)問(wèn)日志和靜態(tài)文件,這種方式要比用 Python 處理快得多得多。

          最后的話(huà)

          本文分享了下一代的 Python Web 框架 Sanic,直接支持異步,且內(nèi)置生產(chǎn)級(jí)別的 Web 服務(wù)器,可以說(shuō)是編寫(xiě) API 相當(dāng)快的工具了,如果有幫助,還請(qǐng)點(diǎn)贊、在看、轉(zhuǎn)發(fā)。

          參考資料:Sanic: https://github.com/sanic-org/sanic




          1. 13個(gè)好用到起飛的Python技巧!

          2. 用Python做了個(gè)私活,小賺1W,說(shuō)下接單心得

          3. 原來(lái)Matplotlib繪圖也可以這么漂亮,這次真的是學(xué)習(xí)到了!



          瀏覽 75
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚欧大陆在线免费观看 | 亚洲视频免费在线 | h片免费网站 | 忍不住的亲子伦中文字幕 | 大香蕉伊人免费网站 |