ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개인과제 : API 관련
    이제 막 슬픔 없이 십오 초 정도가 지났다 2022. 10. 4. 23:44

    0.  디렉토리 구조

    더보기

    -> '/' 

    "홈입니다."

     

    더보기

    --> '/posts' 

    게시글 목록 조회

     

    더보기

     

    ----> '/posts/:postsId'  

    각 게시글 상세조회(:postID = 1~n의 숫자)

     

    더보기

    ----> '/posts/comments/:postsId'  

    각 게시글(1~n)에 달린 댓글 조회. 게시글 번호(postID) 마다 여러개의 댓글이 있다.

     

    더보기

     

    ----> '/posts/comments/:commentsId

    댓글의 삭제와 수정만을 위한 경로.

    commentsId는 몽고DB의 오브젝트ID. 영문과 숫자가 섞인 12바이트 문자열.

    특정한 댓글 하나의 삭제 혹은 수정을 위해 특정한 값이 필요했고, 오브젝트ID를 그대로 가져왔다.

     


    1.수정, 삭제 API의 request를 어떤 방식으로? (param, query, body)

    /**
     * PUT 배포환경 확인
     * 댓글수정
     */
    router.put("/comments/:commentsId", async (req, res) => {
    	const commentsId = req.params.commentsId;
    	const {commentsContent} = req.body;
      
    	if (String(commentsContent).length == 0) {
    		return res.json({ "message": "댓글 내용을 입력해주세요." });
    	}
    	
    	else{
    		const tryEdit = await Comments.updateOne({ "_id": commentsId },{"$set":{"commentsContent":commentsContent}})
    	  	return res.json({"message": "댓글을 수정하였습니다."})
    	} 
    });
    /** 배포환경확인
     * DELETE 
     * 댓글 삭제
     */
    router.delete("/comments/:commentsId", async (req, res) => {
    	const commentsId = req.params.commentsId;
    	await Comments.find({ "_id" : commentsId })
    			.deleteOne({ "_id" : commentsId });
    	
    	res.json({ "message": "댓글을을 삭제하였습니다."});
      });

     

     - 주로 URI의 params를 가져오는 방식. 

     - 라우트 함수 경로에 적혀있는 문자열이 key가 되고, 그곳에 실제로 할당된 값이 value가 된다.

     - 그리고 a)각 스키마의 key이름b)주소 파라미터로 들어오는 key 이름을 동일하게 정했다.

     - 어차피 이 둘을 접근시키기 위해서는 스키마로부터 require (혹은 import)되어 들어온 모델 (내 경우는 Posts 와 Comments)이 필요하지만, 어쨌든 key 이름이 같으니 무엇과 무엇을 연결해야할지 헷갈릴 일이 적었다.

     

    -이외에도, req.body로 구조분해 할당을 통해 key:value 객체를 바로 얻을 수 있었다.

     


    2. RESTful한 API를 설계했나요? 어떤 부분이 그런가요? 어떤 부분이 그렇지 않나요?

     

    - '/posts' 를 프리셋 혹은 피봇 삼아서 아래의 단계가 모두 잘 분리되어 있다.

     

    -게시글목록 조회 > 각 게시글 조회 > 각 게시글에 달린 댓글조회 

     

    -다만 너무 익숙하고 명료한 경로이어서, "ful" 했다고 말하기는 민망하다.

     

    -REST API는 URI 경로를 명사와 소문자로만 작명하고, 무엇을 하는 페이지인지 예측가능하도록 하라는 구체적인 지침도 포함되는 것으로 안다. 그런 지침을 되도록 지키려고 하긴 했다. 

     

    -하지만 오브젝트ID를 URI 에 포함시키는 부분은 아마도 저 지침에서 벗어날 것이다. 거의 노출되지 않는 특수한 경로라 생각하고 예외로 두었다.

     


    3. 역할별로 Directory Structure를 분리하였을 경우 어떠한 이점이 있을까요?

     

    - REST 의 말뜻 (REpresentional State Transfer) 그대로, "재현적"이다.

     

    -역할별로 분리한 디렉토리는 다루는 내용 (book, movie, coffee, post 등) 의 재현이기도 하고, 

     

    -서버의 입장에서는 스스로의 작업 영역의 재현이기도 하며,

     

    -클라이언트의 입장에서는 소통하기 쉽도록 작업내역이 잘 반영된 재현이기도 하다.

     

     

     

     

Designed by Tistory.