Today I learned
- 작성한 S.A의 튜터님의 피드백
- API에 대한 학습
- 학습한 API와 튜터님의 피드백을 프로젝트에 반영
작성한 S.A의 튜터님의 피드백
기능 | method | url | request | response |
팀원리스트 가져오기 | get | /members | - | 팀원 리스트 |
팀원 추가하기 | post | /createMember | {"name":"name", "desc":"desc", "strong":"strong", "style":"style", "goal":"goal", "comment":"comment", "image":"image"} | 추가 팀원 데이터 |
지역 온도 가져오기 | get | http://spartacodingclub.shop/sparta_api/weather/seoul | - | 지정 지역 온도 데이터 |
팀원 프로필 가져오기 | get | /profile | 팀원 상세 데이터 | |
방명록 작성하기 | post | /guestbook | {"name":"name", "comment":"comment"} | 방명록 데이터 |
방명록 가져오기 | get | /guestList | - | 방명록 리스트 |
오늘은 미니프로젝트 S.A를 튜터님이 피드백을 주셨다 /creatMember => /members와 같이 복수형으로 수정해야 하는 피드백이였다 그리고 get이나 create같은 동사보다는 명사를 사용하면 좋다는 피드백도 받았다
단수형 보다는 복수형으로 동사보다는 명사로 작성하는 것이 중요하다 단일화를 해야 한다
request도 한 줄 보다는 아래로 펼쳐지게 수정해야 한다
API에 대한 학습
튜터님의 피드백을 받은 후 API에 대해 조금 더 학습을 진행했다 API 네이밍을 위해서는 동사보다는 명사를 사용하는 게
규칙적이고 더 깔끔하게 관리할 수 있다
GET /getMembers -----> GET /members
POST /createMembers ------> POST /members
API는 대문자보다는 소문자로 작성하는 게 일반적이다 url경로에서 소문자를 사용하는 편이다
혹시 모를 상황을 대비하고 일관성을 유지하기 위해서 소문자로 통일하는 것이 좋다
컬렉션 필터링이 필요한 경우 새로운 API를 만드는 것보다는 URL쿼리를 이용하는 것이 좋다
GET /profile/id/1 --------> GET /profile?id=1
단수보다는 복수의 표현을 사용하는 것이 좋다
POST /profile ---------> POST /profiles
학습한 API와 튜터님의 피드백을 프로젝트에 반영
기능 | method | url | request | response |
팀원리스트 가져오기 | get | /members | - | 팀원 리스트 |
팀원 추가하기 | post | /members | {"name":"name", "desc":"desc", "strong":"strong", "style":"style", "goal":"goal", "comment":"comment", "image":"image"} |
추가 팀원 데이터 |
지역 온도 가져오기 | get | http://spartacodingclub.shop/sparta_api/weather/seoul | - | 지정 지역 온도 데이터 |
팀원 프로필 가져오기 | get | /profiles | - | 팀원 상세 데이터 |
방명록 작성하기 | post | /guestbooks | {"name":"name", "comment":"comment"} |
방명록 데이터 |
방명록 가져오기 | get | /guestbooks | - | 방명록 리스트 |
기존 API
@app.route("/creat-member", methods=["GET", "POST"])
def creat_member():
# 데이터베이스 안에서 members안에 문서를 카운트한다
# 문서가 비었으면 id를 초기화 한다
if (db.members.count_documents({}) == 0):
id = 0
# 문서가 있다면 제일 최근 작성한 문서의 id를 받아온다.
else:
id = db.members.find().sort("_id", -1)[0]["id"]
# 입력받은 값들을 받아서 변수 저장
image_receive = request.form["image_give"]
name_receive = request.form["name_give"]
yourself_receive = request.form["yourself_give"]
strong_receive = request.form["strong_give"]
style_receive = request.form["style_give"]
goals_receive = request.form["goals_give"]
appointment_receive = request.form["appointment_give"]
sns_receive = request.form["sns_give"]
# id가 겹치지 않게 1씩 더해서 id값을 증가시킨다.
id += 1
cnt = 0
# 받아온 값들을 문서로 만든다.
doc = {
"id": id,
"image": image_receive,
"name": name_receive,
"yourself": yourself_receive,
"strong": strong_receive,
"style": style_receive,
"goals": goals_receive,
"appointment": appointment_receive,
"sns": sns_receive,
"viewcnt": cnt
}
# 작성된 문서를 데이터베이스에 밀어넣는다
db.members.insert_one(doc)
# 완료된 메세지를 보낸다
return jsonify({"msg": "추가 완료!"})
@app.route("/profile-get", methods=["GET"])
def profile_get():
# ajax에서 url에 직접 보내준 id_give파라미터를 가져온다.
id_receive = request.args.get('id_give')
# 가져온 파라미터 값이 String으로 가져와진다 그렇기 때문에 데이터베이스 id와 같은 자료형으로 변환 시켜준다.
id = int(id_receive)
# 데이터베이스에서 _id를 제외한 id의 팀원 정보를 검색해서 가져온다.
member = db.members.find_one({"id": id}, {"_id": False})
cnt_receive = member["viewcnt"]
cnt_receive += 1
db.members.update_one({"id": id}, {"$set": {'viewcnt': cnt_receive}})
# 리턴으로 저장한 member를 넘긴다.
return jsonify({"member": member})
@app.route('/guestbook-list', methods=['GET'])
def guestbook_get():
id_receive = request.args.get('id_give')
id = int(id_receive)
guestbook_list = list(db.comment.find({"id": id}, {'_id': False}))
return jsonify({'guestbook_list': guestbook_list})
@app.route('/guestbook', methods=['POST'])
def guestbook():
id_receive = request.form["id_give"]
name_receive = request.form['name_give']
comment_receive = request.form['comment_give']
id = int(id_receive)
doc = {
"id": id,
'name': name_receive,
'comment': comment_receive
}
db.comment.insert_one(doc)
return jsonify({'msg': '방명록 남기기 완료!'})
피드백 반영 후 API
@app.route("/members", methods=["POST"])
def creat_member():
# 데이터베이스 안에서 members안에 문서를 카운트한다
# 문서가 비었으면 id를 초기화 한다
if (db.members.count_documents({}) == 0):
id = 0
# 문서가 있다면 제일 최근 작성한 문서의 id를 받아온다.
else:
id = db.members.find().sort("_id", -1)[0]["id"]
# 입력받은 값들을 받아서 변수 저장
image_receive = request.form["image_give"]
name_receive = request.form["name_give"]
yourself_receive = request.form["yourself_give"]
strong_receive = request.form["strong_give"]
style_receive = request.form["style_give"]
goals_receive = request.form["goals_give"]
appointment_receive = request.form["appointment_give"]
sns_receive = request.form["sns_give"]
# id가 겹치지 않게 1씩 더해서 id값을 증가시킨다.
id += 1
cnt = 0
# 받아온 값들을 문서로 만든다.
doc = {
"id": id,
"image": image_receive,
"name": name_receive,
"yourself": yourself_receive,
"strong": strong_receive,
"style": style_receive,
"goals": goals_receive,
"appointment": appointment_receive,
"sns": sns_receive,
"viewcnt": cnt
}
# 작성된 문서를 데이터베이스에 밀어넣는다
db.members.insert_one(doc)
# 완료된 메세지를 보낸다
return jsonify({"msg": "추가 완료!"})
@app.route("/profiles", methods=["GET"])
def profile_get():
# ajax에서 url에 직접 보내준 id_give파라미터를 가져온다.
id_receive = request.args.get('id_give')
# 가져온 파라미터 값이 String으로 가져와진다 그렇기 때문에 데이터베이스 id와 같은 자료형으로 변환 시켜준다.
id = int(id_receive)
# 데이터베이스에서 _id를 제외한 id의 팀원 정보를 검색해서 가져온다.
member = db.members.find_one({"id": id}, {"_id": False})
cnt_receive = member["viewcnt"]
cnt_receive += 1
db.members.update_one({"id": id}, {"$set": {'viewcnt': cnt_receive}})
# 리턴으로 저장한 member를 넘긴다.
return jsonify({"member": member})
@app.route('/guestbooks', methods=['GET'])
def guestbook_get():
id_receive = request.args.get('id_give')
id = int(id_receive)
guestbook_list = list(db.comment.find({"id": id}, {'_id': False}))
return jsonify({'guestbook_list': guestbook_list})
@app.route('/guestbooks', methods=['POST'])
def guestbook():
id_receive = request.form["id_give"]
name_receive = request.form['name_give']
comment_receive = request.form['comment_give']
id = int(id_receive)
doc = {
"id": id,
'name': name_receive,
'comment': comment_receive
}
db.comment.insert_one(doc)
return jsonify({'msg': '방명록 남기기 완료!'})
오늘의 느낀 점
오늘의 느낀 점은 처음에 API를 설계할 때 단일화하고 통일시켜야 개발할 때도 편하고 이해하기도 편하다.
S.A를 작성할 때 더 API에 대해서 제대로 이해하고 작성을 했으면 프로젝트 진행 중 수정해야 하는 번거로운 일이 없었을 거 같다 무언가 진행할 때 한 번이라도 더 찾아보고 진행해야겠다고 느꼈다 GET POST 요청에 관해서도 약간 잘 못 이해하고 있던 부분이 있는데 오늘 피드백을 받고 API를 학습하고 조금 더 명확하게 알게 되어서 다음 프로젝트는 더 깔끔한 진행이 이루어질 거라고 생각한다 그리고 URL 쿼리라는 GET 요청 시 필요한 데이터를 URL에 파라미터로 담아서 보낼 수 있다는 것도 알게 됐다 그리고 팀원들과 git을 이용해서 github로 같이 작업을 진행하는데 아직 branch를 제대로 이해를 못해서
어려운 경험을 했다 branch에 대해서 더 공부해야겠다.
'과거공부모음' 카테고리의 다른 글
나의 개발일지 TIL(Today I learned) - 미니프로젝트 5일차 (0) | 2022.11.18 |
---|---|
나의 개발일지 TIL(Today I learned) - 미니프로젝트 4일차 (0) | 2022.11.17 |
나의 개발일지 TIL(Today I learned) - 미니프로젝트 2일차 (0) | 2022.11.15 |
나의 개발일지 TIL(Today I learned) - git, github, 미니프로젝트 1일차 (0) | 2022.11.14 |
웹개발 종합반 4주차 개발일지3 (0) | 2022.10.13 |