首頁 > 後端開發 > Python教學 > Python 快速使用 REST API

Python 快速使用 REST API

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

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

匯入,然後使用它來強制驗證:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">from fastapi import FastAPI, Query @app.get('/user') async def user(     *,     user_id: int = Query(..., title=&quot;The ID of the user to get&quot;, gt=0) ):   return { 'user_id': user_id }</pre><div class="contentsignin">登入後複製</div></div>第一個參數

...

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

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

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

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

/user/1

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

如果您有

POST

路由,則只需定義輸入即可<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">@app.post('/user/update') async def update_user(     *,     user_id: int,     really_update: int = Query(...) ):     pass</pre><div class="contentsignin">登入後複製</div></div>在這種情況下,您可以看到

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<div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">登入後複製</div></div>然後您可以在

app / routers / v1 / user.py

中使用上面的使用者代碼-只需導入APIRouter並使用@ router.get('/')< aaaa>而不是@ app.get(' / user')。它會自動路由到/ user / ,因為該路由是相對於前綴的。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">from fastapi import APIRouter router = APIRouter() @router.get('/') async def user(     *,     user_id: int = Query(..., title=&quot;The ID of the user to get&quot;, gt=0),     response_model=User ):   my_user = get_user(user_id)   return my_user</pre><div class="contentsignin">登入後複製</div></div>最後,要在應用程式中使用所有

v1

路由器,只需將main.py編輯為:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">from fastapi import FastAPI from app.routers import v1 app = FastAPI() app.include_router(     v1.router,     prefix=&quot;/api/v1&quot; )</pre><div class="contentsignin">登入後複製</div></div>您可以透過這種方式隨意連結路由器,從而允許您拆分大型應用程式並擁有版本化的API。

Dockerizing and Deploying

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

Dockerfile

是2行!<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 COPY ./app /app</pre><div class="contentsignin">登入後複製</div></div> <p>是否想通过自动重新加载进行 Dockerize 开发?这是我在撰写文件中使用的秘方:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">version: &quot;3&quot; services:   test-api:     build: ..     entrypoint: '/start-reload.sh'     ports:         - 8080:80     volumes:         - ./:/app</pre><div class="contentsignin">登入後複製</div></div> <p>这会将当前目录挂载为<code>app并将在任何更改时自动重新加载。您可能还想将app / app用于更大的应用程序。

有用的网址

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

结论

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

推荐教程:Python教程

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

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
python - ubuntu16.04 lxml的報錯
來自於 1970-01-01 08:00:00
0
0
0
有辦法在PHP裡寫Python嗎?
來自於 1970-01-01 08:00:00
0
0
0
python scrapy爬蟲錯誤
來自於 1970-01-01 08:00:00
0
0
0
python相關問題求解決,有償
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板