Post

Fast API get, post, delete 사용하기

fast api를 사용하기위해 기본적인 get,post,delete를 사용해보자 http의 대표적인 메소드로는 get, post, put, delete가 있다

Fast API get, post, delete 사용하기

fast api를 사용하기위해 기본적인 get,post,delete를 사용해보자 http의 대표적인 메소드로는 get, post, put, delete가 있다

  • get: 데이터를 가져오기
  • post: 데이터를 생성및 저장
  • put: 데이터 업데이트
  • delete: 데이터 삭제

 

Fast API

1
2
3
4
5
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
    return {"Hello":"World!"}

위 코드는 fast api를 임포트하고 fast api의 인스턴스를 생성하는 과정이다

uvicorn main:my_awesome_api --reload로 main.py를 실행하면 Hello : World가 출력된다

 

post

post를 하는 경로와 동작을 생성해야된다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//main.py
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

db = []

class City(BaseModel):
    name: str
    capital: str
    
@app.get("/")
def root():
    return {"Hello":"World!"}

@app.post('/cities') #도시 정보 저장
def create_city(city: City):
    db.append(city.dict())
    
    return db[-1]

@app.post(경로)에서 경로를 설정하고 아래 함수를 통해서 동작을 설정한다 City클래스를 이용해서 입력된 값을 딕셔너리로 바꾸고 db리스트에 추가하는 동작이다

return을 통해서 방금 저장한 값을 확인 할 수 있다 db에 마지막으로 저장된 값을 리턴

 

 

get

get을 통해서 원하는 값 받아오기오기와 전체의 값을 받아 올 수 있다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//main.py
@app.get('/cities') # 저장된 전체 도시정보 가져오기 
def get_cities():
    results =[]
    for city in db:
        results.append({'name':city['name'],'capital':city['capital']})
        
    return results

@app.get('/cities/{city_id}') #선택한 아이디 도시정보 가져오기
def get_city(city_id:int):
    city = db[city_id-1]
    
    return { 'name':city['name'],'capital':city['capital']}

app.get(경로)경로를 보면 두개의 get이 다른 경로를 나타내는걸 알 수 있다

get_cities함수는 저장된 전체 정보를 가져오는 함수이다 results란 변수를 새로 생성해서 db리스트를 반복문으로 돌려 값을 가져와 새로운 리스트에 추가한다 db에는 데이터가 딕셔너리로 되어있어 딕셔너리 형태로 값을 가져와야한다

 

get_city함수는 뒤에 추가적으로 city_id가 붙는다 이건 경로 매개변수로 여기에 들어가는 값을 이용한다

db리스트에서 입력값의 -1의 인덱스(0부터 시작해서 -1함)의 데이터를 city라는 변수에 넣고 해당 데이터만 출력한다

 

 

delete

1
2
3
4
5
6
//main.py
@app.delete('/cities/{city_id}') # 도시 정보 삭제
def delete_city(city_id:int): 
    db.pop(city_id-1)
    
    return {}

경로 매개변수를 받아서 db pop에 값을 이용한다 해당 인덱스의 값을 삭제하는 함수를 실행해서 delete를 구현한다

인덱스 0번이었던(입력은 1이지만 인덱스는 0) name:string,captial:string23 이 삭제된것을 확인 할 수 있다

 

 

경로 같을 때

만약 get 방식으로 경로가 같은 2개가 있다고 한다면

1
2
3
4
5
6
7
@app.get("cite/a")
def get_city1():
  return {"Hello":"a!"}

@app.get("cite/{city_name}")
def get_city2(city_name: str):
  return {"Hello":city_name}

a를 입력 했을때 get_city2대신 get_city1을 실행시키고 싶다면 위 예시처럼 get_city1을 먼저 선언해주면 된다

만약 get_city2가 먼저 선언되었으면 get_city1은 실행되지 못한다

 

위 코드에서 경로가 같은 2개가 있다 get_city와 delete_city는 경로가 같지만 주소창에 입력하면 delete는 실행되지 않고 get_city가 실행된다

왜냐하면 브라우저는 기본적으로 get방식을 이용하기 때문에 선언 순서를 바꾸더라도 get 방식인 get_city를 실행시킨다

 

 

This post is licensed under CC BY 4.0 by the author.