Post

Fast API get, post, 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.