반응형
레시피 조회하는 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
반응형