본문 바로가기
Python/FLASK

간단한 HTTP API 구축해보기

by sophia02 2022. 8. 24.

https://sophia02.tistory.com/134?category=1110833 

 

API

API : Application Programming Interface 한 프로그램에서 다른 프로그램으로 데이터를 주고받기 위한 방법 간단한 예시를 들어보자면 식당의 메뉴판이라고 볼 수 있습니다. 즉, 식당과 손님이 음식을 주

sophia02.tistory.com

기본 API 개념

https://sophia02.tistory.com/136?category=1110833 

 

REST API

REST API Representational State Transfer API REST API❓ REST API란 REST를 기반으로 만들어진 API를 의미합니다. 이때 REST란 Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원..

sophia02.tistory.com

REST API

 

 

HTTP Verbs

"GET"는 Http method 혹은 Http verb 라고 불리며, 웹 서버가 반환해줄 것으로 기대하는 값을 말합니다

scheme:https는 https 프로토콜을 사용했음을 의미합니다.

 

기본적으로 우리는 웹 서버에게 GET 요청을 보내게 되고, 서버는 그에 맞추어 html을 보내주게 됩니다.

만약 /ddongle 이라는 path에 대한 GET 요청이 들어왔는데, 이에 대응하는 리소스가 없다면 서버는 에러를 발생시키게 됩니다. 

 

간단한 HTTP API 구축해보기

from flask import Flask, jsonify

app = Flask(__name__)

# POST / shop -> name 이라는 데이터를 받아 새로운 shop을 생성함
@app.route('/shop', methods=['POST'])
def create_shop():
    pass

# name에 맞는 shop을 보여줌
@app.route('/shop/<string:shop_name>', methods=['GET'])
def get_shop_detail():
    pass

# item_name, price를 받아서 name에 맞는 shop에 새로운 item을 추가
@app.route('/shop/<string:shop_name>/item', methods=['POST'])
def create_item_in_shop():
    pass

# shop에 있는 item 목록을 반환
@app.route('/shop/<string:shop_name>/item', methods=['GET'])
def get_item_list_in_shop(shop_name):
    pass

if __name__ == '__main__':
    app.run()

json은 웹 어플리케이션끼리 데이터를 주고받는 데에 좋은 방법입니다.

플라스크에서는 파이썬의 딕셔너리와 같은 구조를 JSON 형식으로 바꾸어 주는 작업을 jsonify 메서드를 통해서 지원합니다.

이제 간단하게 리스트를 만들고 /shop을 입력하면

이렇게 나옵니다. 하지만 물망초라고 나와야 하는 부분에 깨짐 현상이 있고, 들여쓰기를 해 가독성을 높이는 작업을 해 볼겁니다.

아래의 코드를 입력해줍니다

그리고 조금 더 데이터를 편하게 쓸 수 있도록 JSON에 key를 추가해줍니다

이후 /shop을 입력하면 가독성 있게 바뀌었다

우리가 앞으로 개발할 HTTP API는 요청이 들어오면 어떠한 과정을 수행하고 JSON을 응답해주는게 됩니다.

 

SHOP 생성 구현하기

Postman을 사용해 POST 요청을 보내줍니다

사진과 같이 POST , Headers, KEY, VALUE를 설정해줍니다

json의 형태로 입력해 준 뒤 보내줍니다

이렇게 응답이 오게 됩니다

print()로 인해 결과가 콘솔창에는 이렇게 나오게 됩니다.

get 요청을 보냈을 때에는 우리가 추가한 웃긴 떡볶이 라는 shop이 리스트에 추가되어 있어햐 합니다.

GET으로 바꿔주면 Body에는 추가한 웃긴 떡볶이가 있습니다.

Shop 상세 조회 구현

shop/가게 이름으로 요청했을 때에 해당 이름에 맞는 shop에 대한 상세정보를 반환해주도록 구현해 주겠습니다.

shop_list에 shop_name과 일치하다면 해당 상세정보를 json으로 바꾸어 리턴해주도록 하며, 만약 name이 없는 shop에 대한 상세 정보를 요청 시, 에러메시지를 반환해줍니다.

shop을 몇개 더 추가해줍니다.

이후 postman에서 요청을 보내면 shop에 대한 상세정보를 리턴해 줍니다.

 

shop item 목록 조회 구현하기

url로 받은 shop 이름을 받고, 그 안에 있는 item들만 목록으로 반환시켜줍니다.

포스트맨에서 위의 주소로 GET요청을 보내면 item이 반환됨을 알 수 있습니다.

 

item 생성 구현하기

 

send 후에 정보가 잘 반환되는 것을 볼 수 있습니다. 이제 잘 정보가 들어갔는지 get요청을 같은 주소로 보냅니다.

잘 들어갔다는 것을 확인 할 수 있습니다