파이썬 패스트 API 속성반: 섹션 3

16303 단어 fastapipythonbeginners
다음은 Fast API를 사용하여 Python에서 API를 만들 수 있는 속성 강좌입니다.
어떤 것도 놓치지 않으려면 트위터에 팔로우 해주세요.

붙이다


지금까지 CRUD를 읽었으니 이제 "만들기"를 살펴보겠습니다.
이것은 더 이상 데이터를 읽는 문제가 아니라 새로운 데이터를 만드는 문제입니다.
새 제품을 만들려면 서버에 메시지를 보내야 합니다. 그러려면 HTTP POST 작업이 필요합니다.
POST www.example.com/products
POST 작업은 클라이언트에서 서버로 데이터를 전송합니다.

예.


예를 들어 기존 제품 목록에 제품 "MacBook"을 추가합니다.
다음은 예상 결과입니다.
products = [
    {"id": 1, "name": "iPad", "price": 599},
    {"id": 2, "name": "iPhone", "price": 999},
    {"id": 3, "name": "iWatch", "price": 699},
    {"id": 4, "name": "MacBook", "price": 1299},
]
FastapI를 사용하여 게시물을 게시하려면 다음 코드를 사용해야 합니다.
@app.post("/products")
def create_product(product: dict, response: Response):
    product["id"] = len(products) + 1
    products.append(product)
    response.status_code = 201
    return product
이 코드를 한 줄 한 줄 살펴보자.
@app.post("/products") 
이 코드는FastapI에 이 요청이 POST "/products"작업임을 지정하는 데 사용됩니다.
def create_product(product: dict, response: Response):
이 코드는 서버가 "POST/products"요청을 받았을 때 시작할 기능을 정의하는 데 사용됩니다.
이 함수는 두 개의 매개 변수를 포함하는데, 하나는 제품에 사용되고, 다른 하나는 응답 대상에 대한 인용에 사용된다.
POST 작업을 수행할 때 보내는 데이터는 요청 본문에 포함되어야 하며 JSON 텍스트 형식이어야 합니다.
이 예에서는 FastapI의 모든 기능과 사용 편의성을 살펴봅니다.Fast API는 이것이 POST 요청이라는 것을 알고 있기 때문에 요청체의 JSON을 자동으로 가져와 Python 사전으로 변환하고 결과를 첫 번째 인자 (product) 에 넣습니다.
따라서 이 제품 매개변수를 사용하여 제품을 제품 목록에 추가할 수 있습니다.
product["id"] = len(products) + 1
products.append(product)
제품을 성공적으로 추가한 후에는 해당 상태 코드를 반환해야 합니다.
response.status_code = 201
이 코드는 상태 코드 201을 되돌려 주는 데 사용됩니다.이것은 이 제품이 확실히 성공적으로 만들어졌다는 것을 나타낸다.
마지막으로, 관례에 따라, 신제품은 항상 응답과 함께 되돌아온다.
return product

HTTP 포스트 작업 테스트


웹 브라우저에서는 POST 요청을 시작할 수 없습니다.따라서 브라우저에서 새 API를 테스트할 수 없습니다.
이 점을 해낼 수 있는 다른 몇 가지 방법이 있다.우리는 우체부와 같은 소프트웨어를 사용하여 우체부의 요구를 테스트할 수 있다.
FastapI의 장점 중 하나는 우리의 API에 자동으로 문서를 생성할 수 있다는 것이다.이 문서에서는 사용자가 API를 사용하는 방법, 사용 가능한 URL 경로 및 요청을 실행하는 방법에 대해 알아볼 수 있습니다.
따라서 문서를 사용하여 API를 테스트할 수 있습니다.
앞에서 설명한 대로 API에서 문서는 자동으로 작성됩니다.그것을 보려면 서버를 시작하십시오
$ uvicorn first-api:app --reload
및 액세스/문서
http://127.0.0.1:8000/docs
문서가 화면에 나타납니다!

URL 경로를 테스트하는 것은 매우 간단합니다. 경로 이름을 누르면 FastapI에 인터페이스를 표시하여 이 단점을 테스트할 수 있습니다.
예를 들어 댓글/제품을 클릭하면

그리고 '테스트' 를 누르면 '요청 본문' 부분에 추가할 데이터를 입력할 수 있습니다. (아래의 예시 참조)

데이터는 JSON 텍스트 형식입니다.
{"name": "MacBook", "price": 1299}
마지막으로 실행을 클릭하여 POST 요청을FastapI 서버로 보냅니다.
응답 상태 코드와 응답 자체도 페이지에 표시됩니다.

이 자동 문서는Fast API의 강력한 기능과 사용하기 쉬운 또 하나의 위대한 전시이다.
원한다면 모든 단점을 하나씩 눌러서 테스트할 수 있습니다.

확인


저희가 만든 마지막 예시로 돌아가도록 하겠습니다.
@app.post("/products")
def create_product(product: dict, response: Response):
    product["id"] = len(products) + 1
    products.append(product)
    response.status_code = 201
    return product
@app.post () 함수는 작동할 수 있지만 몇 가지 단점이 있습니다.사실상 검증이 없고 검증이 통과되지 않으면 오류 메시지가 되돌아오지 않는다.
예를 들어, 새 제품을 작성하려면 이름과 가격이 필요합니다."이름"만 보내고 "가격"은 보내지 않으면 어떻게 됩니까?
아니면'가격'이 숫자 형식이 아니라면요.
나는 몇 가지 예를 더 들 수 있지만, 나는 네가 이 개념을 이해한다고 생각한다.
이러한 검증을 하고 관련 오류 메시지를 되돌려주려면 함수에 대량의 코드를 추가해야 합니다.모든 조작과 자원에 대해 이 코드를 반복해야 합니다.이 모든 것들은 우리 프로그램을 매우 복잡하게 만들 것이다.
다행히도 Fast API는 "Fast"API로 명명되었습니다.그래서 자동 검증 시스템을 실현하는 매우 간단한 방법이 있다.이 시스템이 모드야!

패턴


모드는 FastapI가 함수를 검증하는 데 사용하는 데이터 모델입니다.
예를 들어, 다음과 같은 모드를 정의할 수 있습니다.
from pydantic import BaseModel

class Product(BaseModel):
    name: str
    price: float
이 데이터 모델은 이해하기 쉽다.이름 및 가격 속성을 포함하는 제품 엔티티가 있습니다.우리는 심지어 유형 속성이 무엇인지 정의할 수 있다.
데이터 모델을 정의하면 @app를 수정할 수 있습니다.post() 함수
@app.post ("/products")
def create_product(new_product: Product, response: Response):
    product = new_product.dict()
    product["id"] = len(products) + 1
    products.append(product)
    response.status_code = 201
    return product
"dict"형식 매개 변수를 "Product"형식 매개 변수로 바꿉니다.
이 변경이 진행되면, 이 함수를 테스트하면FastapI가 자동 검증을 적용하고, 보내는 내용이 '제품' 모델에 맞지 않으면 오류가 발생합니다.

놓다


PUT 작업은 기존 리소스를 수정하는 데 사용됩니다.POST 작업과 마찬가지로 수정할 데이터는 요청과 함께 보내야 합니다.
다음은 PUT 함수의 예입니다
@app.put("/products/{id}")
def edit_product(id: int, edited_product: Product, response: Response):
    for product in products:
        if product["id"] == id:
            product['name'] = edited_product.name
            product['price'] = edited_product.price      
            response.status_code = 200
            return product
        else:
            response.status_code = 404
            return "Product Not found"
이곳에는 별다른 새로운 일이 없다.이 개념들은 우리가 일찍이 발견한 것과 완전히 같다.

델레트


삭제 작업을 사용하면 자원을 삭제할 수 있습니다.다음은 이 조작을 실현하는 코드입니다
@app.delete("/products/{id}")
def destroy_product(id: int, response: Response):
    for product in products:
        if product["id"] == id:
            products.remove(product)
            response.status_code = 204
            return "Product Deleted"
        else:
            response.status_code = 404
            return "Product Not found"

데이터베이스


방금 만든 CRUD를 실현하는 코드는 좋지만, 자원과 데이터베이스가 연결될 중요한 개념이 부족합니다.다음 절에서는 이 점을 어떻게 하는지 점차적으로 설명할 것이다.

결론


오늘은 여기까지 트위터에 팔로우 해주세요. 다음 글에 올라온 알림을 받으세요.

좋은 웹페이지 즐겨찾기