찾다
백엔드 개발파이썬 튜토리얼REST API의 Python 빠른 사용
REST API의 Python 빠른 사용Jun 15, 2020 pm 06:15 PM
python

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('/')而不是 @ 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 py🎜rrreee🎜에서 이것을 찾았습니다. 그런 다음 /v1/user.py에서 위의 사용자 코드를 사용할 수 있습니다. APIRouter를 가져오고 사용하면 됩니다. @router.get('/') @app.get('/user') 대신 자동으로 /user/로 라우팅됩니다. 경로가 상대적인 접두어이므로 🎜rrreee🎜마지막으로 애플리케이션에서 모든 v1 라우터를 사용하려면 간단히 main.py를 다음과 같이 편집하세요. 🎜rrreee🎜 다음을 수행할 수 있습니다. 이런 방식으로 체인 라우터를 마음대로 분리할 수 있습니다. 대규모 애플리케이션 분할 및 API 버전 관리 🎜🎜🎜Dockerizing and Deploying🎜🎜🎜Fastapi의 저자 중 한 명이 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에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
详细讲解Python之Seaborn(数据可视化)详细讲解Python之Seaborn(数据可视化)Apr 21, 2022 pm 06:08 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

详细了解Python进程池与进程锁详细了解Python进程池与进程锁May 10, 2022 pm 06:11 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

Python自动化实践之筛选简历Python自动化实践之筛选简历Jun 07, 2022 pm 06:59 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

归纳总结Python标准库归纳总结Python标准库May 03, 2022 am 09:00 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于标准库总结的相关问题,下面一起来看一下,希望对大家有帮助。

分享10款高效的VSCode插件,总有一款能够惊艳到你!!分享10款高效的VSCode插件,总有一款能够惊艳到你!!Mar 09, 2021 am 10:15 AM

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

python中文是什么意思python中文是什么意思Jun 24, 2019 pm 02:22 PM

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

Python数据类型详解之字符串、数字Python数据类型详解之字符串、数字Apr 27, 2022 pm 07:27 PM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

详细介绍python的numpy模块详细介绍python的numpy模块May 19, 2022 am 11:43 AM

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전