
如何快速實(shí)現(xiàn)REST API集成以優(yōu)化業(yè)務(wù)流程
@app.get("/api/login", summary='登錄', description='實(shí)現(xiàn)登錄功能', tags=['登錄'])
def login():
return {"Hello": "World"}
@app.get("/api/login_out", summary='登出', description='實(shí)現(xiàn)登出功能', tags=['登出'])
def login_out():
return {"Hello": "World"}
@app.get("/three/{params}", summary='測(cè)試', description='實(shí)現(xiàn)測(cè)試的功能', tags=['測(cè)試'])
def test(params: str = None):
return {"Hello": params}
了解FastAPI程序結(jié)構(gòu):
第一步,導(dǎo)入FastAPI
from?fastapi?import?FastAPI
第二步,創(chuàng)建一個(gè)app實(shí)例
app?=?FastAPI()
第三步,編寫一個(gè) 路徑操作裝飾器
@app.get(“/”)
如圖可見我們輸入的參數(shù),被返回了
GET方式的參數(shù)有兩種,一種是路徑參數(shù),一種是查詢參數(shù)。
路徑參數(shù): 在FastAPI中,路徑參數(shù)是指在URL路徑中的一部分,通常用于指定資源的唯一標(biāo)識(shí)符??梢酝ㄟ^在路徑操作函數(shù)的參數(shù)中定義同名的變量來(lái)聲明路徑參數(shù)。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
在這個(gè)例子中,item_id就是一個(gè)路徑參數(shù)。當(dāng)你訪問如/items/5這樣的URL時(shí),item_id的值就會(huì)被設(shè)置為5,FastAPI會(huì)自動(dòng)識(shí)別并解析路徑參數(shù),無(wú)需進(jìn)行任何額外的配置。此外,F(xiàn)astAPI還支持路徑參數(shù)的類型注解,可以通過類型注解來(lái)指定路徑參數(shù)的類型,F(xiàn)astAPI會(huì)自動(dòng)進(jìn)行類型檢查和轉(zhuǎn)換。
查詢參數(shù): 在FastAPI中,查詢參數(shù)是指URL中跟在問號(hào)后面的鍵值對(duì),通常用于提供非必要的額外信息??梢酝ㄟ^在路徑操作函數(shù)的參數(shù)中定義默認(rèn)值來(lái)聲明查詢參數(shù)。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
在這個(gè)例子中,skip和limit就是查詢參數(shù),我們指定了skip和limit的類型為int,所以如果訪問如/items/?skip=foo&limit=10這樣的URL,FastAPI會(huì)返回一個(gè)明確的錯(cuò)誤,告訴你skip的值必須是整數(shù),當(dāng)你訪問如/items/?skip=20&limit=10這樣的URL時(shí),skip的值就會(huì)被設(shè)置為20,limit的值就會(huì)被設(shè)置為10,F(xiàn)astAPI會(huì)自動(dòng)識(shí)別并解析查詢參數(shù),無(wú)需進(jìn)行任何額外的配置。
不使用 Pydantic的栗子:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.post("/items")
async def read_item(item: dict):
return {"item": item}
用 postman 發(fā)起請(qǐng)求,選 JSON 格式,因?yàn)榻邮盏氖?dict,所以 FastAPI 會(huì)自動(dòng)將 JSON 字符串轉(zhuǎn)換為 dict
使用 Pydantic的栗子:
from fastapi import FastAPI
from typing import Optional
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
age: Optional[int] = None
gender: str
hobby: str = None
@app.post("/items/")
async def create_item(item: Item):
return item
參數(shù)指定為 Pydantic 模型后,FastAPI將請(qǐng)求體識(shí)別為 JSON 字符串,驗(yàn)證數(shù)據(jù),如果驗(yàn)證失敗,會(huì)返回一個(gè)清晰的錯(cuò)誤,準(zhǔn)確指出錯(cuò)誤數(shù)據(jù)的位置和信息,item 會(huì)接收到完整的請(qǐng)求體數(shù)據(jù),擁有所有屬性及其類型,IDE 也會(huì)給予對(duì)應(yīng)的智能提示
運(yùn)行命令: uvicorn main:app –reload
注意:運(yùn)行命令app前面那個(gè)是文件位置,要以實(shí)際的文件名為準(zhǔn)
uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.
FastAPI文檔形式:交互式API文檔、備用API文檔
在瀏覽器中請(qǐng)求 http://127.0.0.1:8000/docs ,顯示交互式API文檔, 自動(dòng)交互式 API 文檔(由 Swagger UI 提供,Swagger UI是一個(gè)非常流行的API文檔生成工具,它可以生成交互式的、易于理解的API文檔),如圖:
此外,還可以通過在FastAPI應(yīng)用對(duì)象上設(shè)置.title, .description 和 .version 屬性來(lái)配置API的整體描述信息。這些信息將會(huì)顯示在自動(dòng)生成的API文檔頁(yè)面的頂部。
此時(shí)還可以單擊某個(gè)具體的API,然后單擊Try it out,然后填寫參數(shù),并單擊Execute按鈕來(lái)執(zhí)行。
在瀏覽器中請(qǐng)求 http://127.0.0.1:8000/redoc ,顯示備用API文檔,備用的自動(dòng)交互式文檔(由 ReDoc 提供),如圖:
總結(jié):本篇文章介紹了FastAPI的基礎(chǔ)部分,總的來(lái)說,F(xiàn)astAPI是一個(gè)功能強(qiáng)大、易用、高效的Web開發(fā)框架,無(wú)論你是Python新手,還是有經(jīng)驗(yàn)的開發(fā)者,F(xiàn)astAPI都能幫助你更高效、更便捷地構(gòu)建出高性能的Web應(yīng)用。
1.FastAPI官網(wǎng) https://fastapi.tiangolo.com/zh/
FastAPI作為Python Web開發(fā)新的利器,已經(jīng)吸引了大量的開發(fā)者的關(guān)注。讓我們一起探索和學(xué)習(xí),用FastAPI構(gòu)建出更好的Web應(yīng)用,重燃Python Web開發(fā)的火花!
文章轉(zhuǎn)自微信公眾號(hào)@洞窩技術(shù)
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)