본문 바로가기

카테고리 없음

[백엔드] Flask: recipe 프로젝트: API 조회: GET

반응형

레시피 조회하는 API

 [‘GET’] API를 만들어봅시다. 

 

 API 설계서에 GET과 POST의 경로가 같다. 

 

그러므로, vscode에서 같은 클래스에서 작성하면 된다. 

app.py에서 경로 설정했을 때, 하기 처럼 작성했으므로.

api = Api(app)
api.add_resource(RecipeListResource,'/recipes')

[‘GET’]에는 body에 데이터를 절대 넣지 않는다. 

대신 페이징 처리를 해준다.

ㄴ 페이징: 한번에 몇개씩 보여줄거냐를 설정

params에 key를 설정하고 value를 입력하면, 경로에 자동으로 ?가 생기고, 뒤가 작성이 된다. 

 

vscode에서 상기 POST와 같은 클래스에서 코드를 작성한다. 

    def get(self):
        # 저장되어있는 모든 API를 가져오는 것. 우선 mysql로 간다. 쿼리문을 가져와야하기 때문
        # 쿼리 스트링으로 오는 데이터는 아래처럼 처리해준다.
        offset = request.args.get('offset')
        limit = request.args.get('limit')

        # 디비로부터 데이터를 받아서, 클라이언트에 보내준다.
        try :
            connection = get_connection()

            query = '''select *
                    from recipe
                    where is_publish =1
                    limit '''+offset+''' , '''+limit+''';'''

            cursor = connection.cursor(dictionary = True)
            cursor.execute(query)

            # select문은, 아래 함수를 이용해서, 데이터를 가져온다.
            result_list = cursor.fetchall()
            # 여기에 쿼리의 결과가 있음

            print(result_list)

            # 중요!
            # 디비에서 가져온 timestamp는 파이썬의 datetime으로 자동 변경 된다.
            # 문제는! 이 데이터를 json으로 바로 보낼수 없으므로, 문자열로 바꿔서 다시 저장해서 보낸다.

            i = 0
            for record in result_list :
                # 한 행씩 가져와서, 그 행에 들어있는 i번째의 created_at을 ios 포맷으로 바꿔라.  
                result_list[i]['created_at'] = record['created_at'].isoformat()
                result_list[i]['updated_at'] = record['updated_at'].isoformat()
                i = i + 1            
               
            cursor.close()
            connection.close()

        except mysql.connector.Error as e :
            print(e)
            cursor.close()
            connection.close()

            return {"error" : str(e)}, 503
            # 503으로 보내겠다.
 
        return { "result" : "success" ,
                "count" : len(result_list) ,
                "result_list" : result_list }, 200
                # 첫번째 키값


            # 디비에서 가져온 timestamp는 파이썬의 datetime으로 자동 변경 된다.
            # 문제는! 이 데이터를 json으로 바로 보낼수 없으므로, 문자열로 바꿔서 다시 저장해서 보낸다.

            i = 0
            for record in result_list :
                # 한 행씩 가져와서, 그 행에 들어있는 i번째의 created_at을 ios 포맷으로 바꿔라.  
                result_list[i]['created_at'] = record['created_at'].isoformat()
                result_list[i]['updated_at'] = record['updated_at'].isoformat()
                i = i + 1                       


GET 관련 포스팅: https://yeo0616.tistory.com/171

반응형