Fastapi는 Pydantic 및 OpenAPI(이전 Swagger)를 사용한 문서화, Docker를 사용한 신속한 개발 및 배포, Starlette 프레임워크 기반의 간단한 테스트를 장려하는 Python 기반 프레임워크입니다.
불필요한 부풀림을 추가하지 않고도 자동 OpenAPI 검증 및 문서화와 같은 많은 이점을 제공합니다. 내장 기능을 제공하지 않는 것과 너무 많은 내장 기능을 제공하는 것 사이에는 균형이 잘 잡혀 있다고 생각합니다.시작하기
fastapi 및 ASGI 서버(예: uvicorn) 설치:pip
및
python
인 경우 give 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"}
pip
和
python
给您python 2版本,则可能必须使用
pip3
和
python3
。另外,请查看我关于python入门的文章。
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 }
并在main.py
文件中添加旧的“ hello world”:
@app.post('/user/update') async def update_user( *, user_id: int, really_update: int = Query(...) ): pass
然后运行以进行开发,可以运行uvicorn main:app --reload
这就是简单服务器要做的全部!现在您可以检查 //localhost:8000/ 以查看“主页”。而且,如您所见,JSON响应“正常工作”!您还可以通过 //localhost:8000/docs 免费获得Swagger UI。
如前所述,很容易验证数据(并为接受的数据格式生成Swagger文档)。只需从fastapi添加Query
导入,然后使用它来强制验证:
from pydantic import BaseModel class User(BaseModel): id:: int name: str email: str
第一个参数...
是默认值,如果用户不提供值则提供该默认值。如果设置为None
,则没有默认值,并且该参数是可选的。为了没有默认值并且该参数是强制性的,请使用Ellipsis ,或...
代替。
如果运行此代码,则会在swagger UI上自动看到更新:
Swagger UI允许您查看新的/ user路由并使用特定的用户ID进行请求
如果您输入任何用户ID,您会看到它会自动为您执行请求,例如 //localhost:8000/user?user_id=1。在页面中,您只能看到回显了用户ID!
如果要改为使用路径参数(以使其为/user/1
,则只需输入并使用Path
而不是Query
。也可以结合两者
如果您有POST
路由,则只需定义输入即可
async def update_user(*, user: User): pass
在这种情况下,您可以看到user_id
仅被定义为一个没有Query
或Path
的整数;这意味着它将在POST请求正文中。如果您接受更复杂的数据结构,例如JSON数据,则应研究请求模型。
您可以使用Pydantic模型记录并声明详细的请求和响应模型。这不仅可以让您拥有所有模型的自动OpenAPI文档,而且还可以验证请求模型和响应模型,以确保输入的任何POST数据都是正确的,并且返回的数据也符合该模型。
只需像这样声明模型:
@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
然后,如果您希望将用户模型作为输入,则可以执行以下操作:
from fastapi import APIRouter from .user import router as user_router router = APIRouter() router.include_router( user_router, prefix='/user', tags=['users'], )
或者,如果您要将其用作输出:
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
您可以使用APIRouter
将api分解为路由。例如,我已经在我的 API 中找到了这个app / routers / v1 / __ init __。py
from fastapi import FastAPI from app.routers import v1 app = FastAPI() app.include_router( v1.router, prefix="/api/v1" )
然后您可以在app / routers / v1 / user.py
中使用上面的用户代码-只需导入APIRouter
并使用@ router.get('/')< aaaa>
而不是@ app.get('/ user')
。它会自动路由到/ user /
,因为该路由是相对于前缀的。
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7 COPY ./app /app
最后,要在应用程序中使用所有v1
路由器,只需将main.py
编辑为:
version: "3" services: test-api: build: .. entrypoint: '/start-reload.sh' ports: - 8080:80 volumes: - ./:/app
您可以通过这种方式随意链接路由器,从而允许您拆分大型应用程序并拥有版本化的API。
Fastapi 的作者使出乎意料的轻松之一就是 Dockerizing!默认的Dockerfile
그런 다음 개발을 위해 실행하면를 실행할 수 있습니다. uvicorn main:app --reload
Query
를 추가하고 이를 사용하여 유효성 검사를 강제하세요. rrreee첫 번째 매개변수
...
는 기본값이며 사용자가 제공하지 않는 경우 제공됩니다. 값은 기본값입니다.
없음
으로 설정하면 기본값이 없으며 매개변수는 선택사항입니다. 기본값이 없고 매개변수가 필수이기 때문에 대신 Ellipsis나
...
를 사용하세요. 이 코드를 실행하면 Swagger UI에 자동으로 업데이트가 표시됩니다:
Swagger UI를 사용하면 새로운 /user 경로를 보고 특정 사용자 ID로 요청할 수 있습니다. 사용자 ID를 입력하면 자동으로 요청이 수행되는 것을 볼 수 있습니다. 예: / /localhost:8000/user?user_id=1. 페이지에서는 에코된 사용자 ID만 볼 수 있습니다! 대신 경로 매개변수를 사용하려면(
/user/1
이 되도록)
Query
대신
Path
를 입력하고 사용하세요. > .두 개의
POST
경로가 있는 경우 입력을 정의하기만 하면 됩니다. rrreee이 경우에는 다음을 볼 수 있습니다.
user_id
는
Query
또는
Path
없이 정수로만 정의됩니다. 즉, 더 복잡한 경우 POST 요청 본문에 포함됩니다. JSON 데이터와 같은 데이터 구조를 사용하려면 요청 모델을 살펴봐야 합니다. 요청 및 응답 모델 Pydantic 모델을 사용하여 자세한 요청 및 응답 모델을 기록하고 선언할 수 있습니다. 이는 모든 사용자에 대한 자동 OpenAPI를 허용할 뿐만 아니라 모델을 문서화할 뿐만 아니라 입력된 POST 데이터가 정확하고 반환된 데이터도 모델과 일치하는지 확인하기 위해 요청 모델과 응답 모델을 검증합니다. 다음과 같이 모델을 선언하세요. rrreee그럼 원하는 경우. 사용자 모델을 입력으로 사용할 수 있습니다: rrreee 또는 출력으로 사용하려는 경우: rrreee더 큰 API를 라우팅하고 분해합니다
APIRouter
를 사용할 수 있습니다. API를 경로로 분할합니다. 예를 들어, 내 API pyrrreee에서 이것을 찾았습니다. 그런 다음 /v1/user.py에서 위의 사용자 코드를 사용할 수 있습니다.
APIRouter
를 가져오고 사용하면 됩니다.
@router.get('/')< aaaa>
@app.get('/user')
대신 자동으로
/user/로 라우팅됩니다.
경로가 상대적인 접두어이므로 rrreee마지막으로 애플리케이션에서 모든
v1
라우터를 사용하려면 간단히
main.py
를 다음과 같이 편집하세요. rrreee 다음을 수행할 수 있습니다. 이런 방식으로 체인 라우터를 마음대로 분리할 수 있습니다. 대규모 애플리케이션 분할 및 API 버전 관리 Dockerizing and DeployingFastapi의 저자 중 한 명이 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教程
위 내용은 REST API의 Python 빠른 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!