Python 快速使用 REST API

Guanhui
發布: 2020-06-15 18:15:24
轉載
5026 人瀏覽過

Python 快速使用 REST API

##之前先研究一款新的 Python 語言的API,並在一位同事的建議下,我們決定使用 Fastapi 為我們的架構。

Fastapi是一個基於python的框架,該框架鼓勵使用Pydantic和OpenAPI(以前稱為Swagger)進行文件編制,使用Docker進行快速開發和部署以及基於Starlette框架進行的簡單測試。

它提供了許多好處,例如自動OpenAPI驗證和文件編制,而無需添加不必要的膨脹。我認為,在不提供任何內建功能與提供太多內建功能之間取得很好的平衡。

入門

安裝fastapi 和ASGI 伺服器(例如uvicorn):

確保您使用的是Python 3.6.7如果pippython給您python 2版本,則可能必須使用pip3python3。另外,請查看我關於python入門的文章。

pip install fastapi uvicorn
登入後複製
並在

main.py檔案中新增舊的「 hello world」:

from fastapi import FastAPI app = FastAPI() @app.get("/") def home(): return {"Hello": "World"}
登入後複製

運行開發##然後運行以進行開發,可以運行

uvicorn main:app --reload

這就是簡單伺服器要做的全部!現在您可以檢查 //localhost:8000/ 以查看「主頁」。而且,如您所見,JSON響應“正常工作”!您也可以透過 //localhost:8000/docs 免費取得Swagger UI。

驗證

如前所述,很容易驗證資料(並為接受的資料格式產生Swagger文件)。只需從fastapi新增

Query

匯入,然後使用它來強制驗證:

from fastapi import FastAPI, Query @app.get('/user') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0) ): return { 'user_id': user_id }
登入後複製
第一個參數

...

是預設值,如果使用者不提供值則提供該預設值。如果設定為None,則沒有預設值,且該參數是可選的。為了沒有預設值且該參數是強制性的,請使用Ellipsis ,或...取代。如果執行此程式碼,則會在swagger UI上自動看到更新:

#Swagger UI可讓您查看新的/ user路由並使用特定的使用者ID進行要求

如果您輸入任何使用者ID,您會看到它會自動為您執行要求,例如 //localhost:8000/user?user_id=1。在頁面中,您只能看到回顯了使用者ID!

如果要改為使用路徑參數(使其為

/user/1

,則只需輸入並使用Path而不是Query。也可以結合兩者Post 路線

如果您有

POST

路由,則只需定義輸入即可

@app.post('/user/update') async def update_user( *, user_id: int, really_update: int = Query(...) ): pass
登入後複製
在這種情況下,您可以看到

user_id

僅被定義為一個沒有QueryPath的整數;這表示它將在POST請求正文中。如果您接受更複雜的資料結構,例如JSON數據,則應研究請求模型。

請求和回應模型

您可以使用Pydantic模型記錄並聲明詳細的請求和回應模型。這不僅可以讓您擁有所有模型的自動OpenAPI文檔,還可以驗證請求模型和響應模型,以確保輸入的任何POST資料都是正確的,並且返回的資料也符合該模型。

只需像這樣聲明模型:

from pydantic import BaseModel class User(BaseModel): id:: int name: str email: str
登入後複製

然後,如果您希望將使用者模型作為輸入,則可以執行以下操作:

async def update_user(*, user: User): pass
登入後複製

或者,如果您要將其用作輸出:

@app.get('/user') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0), response_model=User ): my_user = get_user(user_id) return my_user
登入後複製

路由和分解更大的API

您可以使用

APIRouter

將api分解為路由。例如,我已經在我的API 中找到了這個app / routers / v1 / __ init __。py

from fastapi import APIRouter from .user import router as user_router router = APIRouter() router.include_router( user_router, prefix='/user', tags=['users'], )
登入後複製
然後您可以在

app / routers / v1 / user.py

中使用上面的使用者代碼-只需導入APIRouter並使用@ router.get('/')< aaaa>而不是@ app.get(' / user')。它會自動路由到/ user /,因為該路由是相對於前綴的。

from fastapi import APIRouter router = APIRouter() @router.get('/') async def user( *, user_id: int = Query(..., title="The ID of the user to get", gt=0), response_model=User ): my_user = get_user(user_id) return my_user
登入後複製
最後,要在應用程式中使用所有

v1

路由器,只需將main.py編輯為:

from fastapi import FastAPI from app.routers import v1 app = FastAPI() app.include_router( v1.router, prefix="/api/v1" )
登入後複製
您可以透過這種方式隨意連結路由器,從而允許您拆分大型應用程式並擁有版本化的API。

Dockerizing and Deploying

Fastapi 的作者使出乎意料的輕鬆之一就是Dockerizing!預設的

Dockerfile

是2行!

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 COPY ./app /app
登入後複製

是否想通过自动重新加载进行 Dockerize 开发?这是我在撰写文件中使用的秘方:

version: "3" services: test-api: build: .. entrypoint: '/start-reload.sh' ports: - 8080:80 volumes: - ./:/app
登入後複製

这会将当前目录挂载为app并将在任何更改时自动重新加载。您可能还想将app / app用于更大的应用程序。

有用的网址

所有这些信息都来自 Fastapi网站,该文档具有出色的文档,我鼓励您阅读。此外,作者在 Gitter 上非常活跃并乐于助人!

结论

就是这样-我希望本指南对您有所帮助,并且您会像我一样喜欢使用 Fastapi。

推荐教程:Python教程

以上是Python 快速使用 REST API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!