본문 바로가기

과거공부모음

나의 개발일지 TIL(Today I learned) - 미니프로젝트 3일차

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에 대해서 더 공부해야겠다.