確保您使用的是Python 3.6.7 如果pip 和
python 給您python 2版本,則可能必須使用
pip3 和
python3 。另外,請查看我關於python入門的文章。
pip install fastapi uvicorn並在
main.py檔案中新增舊的「 hello world」:
from fastapi import FastAPI app = FastAPI() @app.get("/") def home(): return {"Hello": "World"}
這就是簡單伺服器要做的全部!現在您可以檢查 //localhost:8000/ 以查看「主頁」。而且,如您所見,JSON響應“正常工作”!您也可以透過 //localhost:8000/docs 免費取得Swagger UI。
匯入,然後使用它來強制驗證:<pre class="brush:php;toolbar:false">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 }</pre>
第一個參數
是預設值,如果使用者不提供值則提供該預設值。如果設定為None
,則沒有預設值,且該參數是可選的。為了沒有預設值且該參數是強制性的,請使用Ellipsis ,或...
取代。 如果執行此程式碼,則會在swagger UI上自動看到更新:
#Swagger UI可讓您查看新的/ user路由並使用特定的使用者ID進行要求
如果您輸入任何使用者ID,您會看到它會自動為您執行要求,例如 //localhost:8000/user?user_id=1。在頁面中,您只能看到回顯了使用者ID!
如果要改為使用路徑參數(使其為
/user/1,則只需輸入並使用Path
而不是Query
。也可以結合兩者Post 路線
路由,則只需定義輸入即可<pre class="brush:php;toolbar:false">@app.post('/user/update')
async def update_user(
*,
user_id: int,
really_update: int = Query(...)
):
pass</pre>
在這種情況下,您可以看到
僅被定義為一個沒有Query
或Path
的整數;這表示它將在POST請求正文中。如果您接受更複雜的資料結構,例如JSON數據,則應研究請求模型。
只需像這樣聲明模型:
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
將api分解為路由。例如,我已經在我的API 中找到了這個app / routers / v1 / __ init __。py
<pre class="brush:php;toolbar:false">from fastapi import APIRouter
from .user import router as user_router
router = APIRouter()
router.include_router(
user_router,
prefix='/user',
tags=['users'],
)</pre>
然後您可以在
中使用上面的使用者代碼-只需導入APIRouter
並使用@ router.get('/')< aaaa>
而不是@ app.get(' / user')
。它會自動路由到/ user /
,因為該路由是相對於前綴的。<pre class="brush:php;toolbar:false">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</pre>
最後,要在應用程式中使用所有
路由器,只需將main.py
編輯為:<pre class="brush:php;toolbar:false">from fastapi import FastAPI
from app.routers import v1
app = FastAPI()
app.include_router(
v1.router,
prefix="/api/v1"
)</pre>
您可以透過這種方式隨意連結路由器,從而允許您拆分大型應用程式並擁有版本化的API。
是2行!<pre class="brush:php;toolbar:false">FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
COPY ./app /app</pre>
<p>是否想通过自动重新加载进行 Dockerize 开发?这是我在撰写文件中使用的秘方:</p>
<pre class="brush:php;toolbar:false">version: "3"
services:
test-api:
build: ..
entrypoint: '/start-reload.sh'
ports:
- 8080:80
volumes:
- ./:/app</pre>
<p>这会将当前目录挂载为<code>app
并将在任何更改时自动重新加载。您可能还想将app / app
用于更大的应用程序。
所有这些信息都来自 Fastapi网站,该文档具有出色的文档,我鼓励您阅读。此外,作者在 Gitter 上非常活跃并乐于助人!
就是这样-我希望本指南对您有所帮助,并且您会像我一样喜欢使用 Fastapi。
推荐教程:Python教程
以上是Python 快速使用 REST API的詳細內容。更多資訊請關注PHP中文網其他相關文章!