我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」稍微帶大家認識了FastAPI這個框架, 它讓我們快速的架設一個API服務, 並提供了許多標準化功能, 只要照著規範走就能快速的開發出來, 但我們除了能開發出應用之外, 也要設計的更人性化一點, API最重要的就是路由了, 路由就像是一張地圖🗺️ 一樣, 明確的標示出地理位置, 而路由應該就像地圖🗺️ 一眼就能看出我該從哪裡去, 讓介接者可以明確的知道怎麼使用API, 這個章節我們要教您如何有條理的來組織它。
@app.get("/")
def get_root():
return {"Hello": "My API"}
夠簡單吧!! But…, 我們如果有一堆功能呢? 像是ner、tts、stt、mail…等, 雖然都可以擠在同一個檔案上, 但就得保佑🙏未來接手的開發者夠耐心, 否則看到一大陀的程式碼肯定發瘋。
這種路由API如果不好好設計規劃, 隨著專案的成長, 勢必會像電線一般雜亂🤯。
大致上我們的專案目錄會長的像路由階層一樣, 這樣一來才能較容易相互匹配對應。
|- api
|- ner
|- __init__.py
|- router.py
|- tts
|- router.py
# 組織底下所有路由
|- main.py
那我們大概說明一下在「main.py」要如何組織這些API。
# main.py
import uvicorn
from fastapi import FastAPI
from api.ner import ner_router
from api.tts import tts_router
app = FastAPI(
title='我的API文件 🚀',
description='這份API用於機器學習入門簡介',
)
app.include_router(ner_router)
app.include_router(tts_router)
config = {
'host': '0.0.0.0',
'port': 9880,
}
if __name__ == '__main__':
uvicorn.run(
'api.main:app',
**config
)
from fastapi import APIRouter
ner_router = APIRouter(
prefix='/ner',
tags=['ner'],
)
@ner_router.get('', summary='取得實體', description='裡面包含..')
async def get_entities():
return '取得實體'
# 這是讓我們import路徑時可以少一層
from api.ner.router import ner_router
__all__ = [
'ner_router'
]
from fastapi import APIRouter
tts_router = APIRouter(
prefix='/tts',
tags=['tts'],
)
@tts_router.get('', summary='tts', description='語音合成...')
async def tts():
return '語音合成API'
# 這是讓我們import路徑時可以少一層
from api.tts.router import tts_router
__all__ = [
'tts_router'
]
python api/main.py
打開瀏覽器看文檔先: http://localhost:9880/docs
這個章節主要教您如何組織路由, 這部份看似簡單卻無比的重要, 因為一個好的API設計取決於路由的規劃, 這會讓我們整個專案更加的乾淨簡潔, 也期待您跟著我們一起學習成長唷!