REST API의 Python 빠른 사용

Guanhui
풀어 주다: 2020-06-15 18:15:24
앞으로
5011명이 탐색했습니다.

Fastapi는 Pydantic 및 OpenAPI(이전 Swagger)를 사용한 문서화, Docker를 사용한 신속한 개발 및 배포, Starlette 프레임워크 기반의 간단한 테스트를 장려하는 Python 기반 프레임워크입니다.REST API의 Python 빠른 사용

불필요한 부풀림을 추가하지 않고도 자동 OpenAPI 검증 및 문서화와 같은 많은 이점을 제공합니다. 내장 기능을 제공하지 않는 것과 너무 많은 내장 기능을 제공하는 것 사이에는 균형이 잘 잡혀 있다고 생각합니다.

시작하기

fastapi 및 ASGI 서버(예: uvicorn) 설치:

Python 3.6.7+를 사용하고 있는지 확인하세요.

pippython인 경우 give 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"}
로그인 후 복사

Run development

pippython给您python 2版本,则可能必须使用 pip3python3。另外,请查看我关于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 路线

如果您有POST路由,则只需定义输入即可

async def update_user(*, user: User): pass
로그인 후 복사

在这种情况下,您可以看到user_id仅被定义为一个没有QueryPath的整数;这意味着它将在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
로그인 후 복사

路由和分解更大的API

您可以使用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。

Dockerizing and Deploying

Fastapi 的作者使出乎意料的轻松之一就是 Dockerizing!默认的Dockerfile그런 다음 개발을 위해 실행하면를 실행할 수 있습니다. uvicorn main:app --reload

간단한 서버가 하는 일은 이것이 전부입니다! 이제 //localhost:8000/을 확인하여 "홈 페이지"를 볼 수 있습니다. 그리고 보시다시피 JSON 응답은 "그냥 작동합니다"! //localhost:8000/docs에서 Swagger UI를 무료로 얻을 수도 있습니다. Validation앞서 언급했듯이 데이터의 유효성을 검사하는 것은 쉽습니다(그리고 허용되는 데이터 형식에 대한 Swagger 문서를 생성합니다). fastapi에서 가져오기한 Query를 추가하고 이를 사용하여 유효성 검사를 강제하세요. rrreee첫 번째 매개변수 ...는 기본값이며 사용자가 제공하지 않는 경우 제공됩니다. 값은 기본값입니다. 없음으로 설정하면 기본값이 없으며 매개변수는 선택사항입니다. 기본값이 없고 매개변수가 필수이기 때문에 대신 Ellipsis나 ...를 사용하세요. 이 코드를 실행하면 Swagger UI에 자동으로 업데이트가 표시됩니다: Swagger UI를 사용하면 새로운 /user 경로를 보고 특정 사용자 ID로 요청할 수 있습니다. 사용자 ID를 입력하면 자동으로 요청이 수행되는 것을 볼 수 있습니다. 예: / /localhost:8000/user?user_id=1. 페이지에서는 에코된 사용자 ID만 볼 수 있습니다! 대신 경로 매개변수를 사용하려면( /user/1이 되도록) Query대신 Path를 입력하고 사용하세요. > .두 개의

Post 경로

를 결합하는 것도 가능합니다. POST경로가 있는 경우 입력을 정의하기만 하면 됩니다. rrreee이 경우에는 다음을 볼 수 있습니다. user_idQuery또는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!