[REAL Python – Flask] – “Flask HTTP API(3) – Flask-RESTful 로 삭제, 수정 api 구축하기”
[REAL Python – Flask] – “Flask HTTP API(3) – Flask-RESTful 로 삭제, 수정 api 구축하기”
삭제 api 구축하기
지금까지 우리는 get, post 메서드들을 정의해줌으로서 car에 대한 조회, 생성 api를 구축했습니다.
이제 삭제를 구현하기 위해서, 해당 http method의 소문자 버전인 delete() 메서드를 구현할 것입니다.
자동차의 목록은, 파이썬 리스트에 저장하기로 했으므로 자동차 삭제 api를 구현한다는 것은 해당 파이썬 리스트에서 원하는 자동차가 삭제되는 것을 의미합니다. 아래와 같이 구현해볼 수 있을 겁니다. url로 들어온 이름에 맞는 자동차가 있다면 그것을 제외하고 cars
라는 리스트를 재정의하는 방식입니다.
또한, 위와 같이 이름에 맞는 자동차가 존재하지 않는 경우, 404 상태 코드와 에러 메시지를 반환하게끔 처리할 수 있습니다.
실제로 테스트를 한 번 해 보겠습니다.
python ./app.py
를 수행하면 서버가 열릴 것이고,
위와 같이 /cars 에 GET 요청을 보낸다면, 생성된 자동차는 아무것도 없으므로 빈 리스트가 떠야 합니다.
그리고 /cars/morning 으로 POST 요청을 보낸다면, 서버는 우리에게 생성된 자동차의 정보를 알려줄 겁니다. 그리고, 다시 /cars 에 GET 요청을 보낸다면..
위와 같이 생성된 자동차가 목록에 추가된 것을 확인할 수 있습니다. 저는 몇 개의 자동차를 더 추가하겠습니다.
이제 위의 리스트에서 존재하는 morning 을 지워 보겠습니다. /car/morning 으로 DELETE 요청을 보내 보세요.
그리고, 다시 /cars 로 GET 요청을 보내서 자동차의 리스트를 확인해 봅시다.
성공적으로 삭제된 것을 볼 수 있네요!
만약 없는 자동차 이름에 대해서 DELETE 요청을 보낸다면,
404 상태 코드와 함께 에러 메시지를 응답해주는 것을 확인할 수 있습니다.
수정 api 구축하기
이제, put()
메서드를 구현함으로서 우리의 서버가 PUT 요청을 받을 수 있게끔 구현해 봅시다.
현재 글의 소제목은 “수정 api 구축하기” 이지만 PUT 은 새로운 리소스를 생성하는 역할 또한 합니다.
PUT 은 멱등성을 가진다고 소개되어 있죠? 모질라 재단 개발자 문서에서 소개하는 “멱등성” 이란 아래와 같습니다.
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말합니다.
PUT 요청을 아무리 많이 보내더라도, 서버는 같은 효과를 가져야 합니다. 이는 POST와는 사뭇 다릅니다. 예컨대 POST 요청은 자동차를 생성하라는 요청이었습니다. POST 요청을 열 번 보낸다면, 우리의 자동차 리스트에는 열 개의 자동차가 생겨야 합니다. (자동차 이름이 중복됨을 허용할 시)
그렇지만 PUT 요청의 경우에는 열 번, 심지어 일억 번 보낸다고 할지라도 서버는 같은 효과를 가져야 합니다. 그렇기 때문에, PUT 은 “새로운 자동차를 생성” 하거나, “이미 존재하는 자동차의 정보를 업데이트” 하는 기능을 가집니다.
그러므로, 위와 같이 구현할 수 있을 겁니다. name을 받은 후, name에 맞는 자동차가 없다면 새로 생성하고, 그렇지 않다면 update()
메서드를 사용해서 업데이트를 진행합니다.
서버를 재시동한 후 아래와 같이 테스트를 진행해 보겠습니다. 재시동한 다음이라면, 자동차의 목록은 비어 있어야 합니다.
이후, car/starex로 PUT 요청을 보냅니다. starex 라는 자동차는 현재 자동차 리스트에 없으므로, starex 라는 자동차가 하나 생성되어야겠죠?
목록을 조회해 보면, 다음과 같이 잘 생성된 것을 확인할 수 있습니다.