Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] 2주차 과제 제출 #4

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

[feat] 2주차 과제 제출 #4

wants to merge 1 commit into from

Conversation

choyeongju
Copy link
Member

@choyeongju choyeongju commented Apr 16, 2024

Related Issue 📌

Description ✔️

💬 등록한 모든 멤버가 List로 반환되는 API 구현하기

🔅 Class 구조

image

🔅 리스트로 받아온 모습

image

🔅 MemberController

image

🔅 MemberService

image

🔅 API 명세서

📓POST API

회원을 등록하는 기능을 제공합니다

📎Request

## *Request syntax*
{
		"name" : "조영주2",
		"part" : "SERVER",
		"age" : 23
}

{
		"name" : "조영주1",
		"part" : "SERVER",
		"age" : 23
}
메서드 요청 URL
POST http://localhost:8080/api/v1/member

Path Parameter

없음.

Request Header

없음.

Request Body

이름 타입 Description
name string 사용자 이름
part string 사용자 파트
age int 사용자 나이

📎Response

Response Body

status  
SUCCESS 없음
FAIL {
"timestamp": "2024-04-14T17:19:35.801+00:00"
"status": 400
"error": "Bad Request"
"path": "/api/v1/member"
}

📓GET API_Seminar

POST한 목록을 Id 번호로 조회합니다.

📎Request

Request syntax

메서드 요청 URL
GET http://localhost:8080/api/v1/member/:memberId

Path Parameter

{memberId}

Request Header

없음.

Request Body

이름 타입 Description
memberId int 사용자 아이디

📎Response

Response Body

status  
SUCCESS {"name":"조영주","part":"SERVER","age":23}
FAIL (type=Internal Server Error, status=500)

📓GET API_Homework

POST한 회원 목록을 리스트로 모두 조회합니다.

📎Request

Request syntax

메서드 요청 URL
GET http://localhost:8080/api/v1/member/memberList

Path Parameter

/memberList

Request Header

없음.

Request Body

없음.

📎Response

Response Body

status  
SUCCESS [{"name":"조영주2","part":"SERVER","age":23},{"name":"조영주1","part":"SERVER","age":23}]
FAIL (type=Internal Server Error, status=500), []

📓 DELETE API

목록에서 회원의 Id로 DELETE 를 수행한다.

📎Request

Request syntax

메서드 요청 URL
DELETE http://localhost:8080/api/v1/member/1?=2memberId

Path Parameter

{memberId}

Request Header

없음.

Request Body

이름 타입 Description
memberId int 사용자 아이디
 

📎Response

Response Body

status  
SUCCESS 없음.
FAIL (type=Internal Server Error, status=500),
{
"timestamp": "2024-04-14T17:25:53.436+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/api/v1/member/4"
}

To Reviewers

📝 세미나에서 처음 접한 애노테이션과 표현들이 많아서, 관련된 내용을 찾아보고 코드에 주석을 달면서 리마인드 하며 익히는 것에 집중했습니다!
📝 API 명세서가 올바르게 작성된 것이 맞는지 궁금합니다!
📝 풀 리퀘스트에서 과제 설명을 깔끔하게 구성할 수 있는 법에 대해서 공부(?)가 조금 필요할 것 같습니다.
📝 예외처리를 적절하게 하려면 어떤 것을 고려해보아야 하나요?

@choyeongju choyeongju self-assigned this Apr 16, 2024
@choyeongju choyeongju changed the title [feat] 2주차 세미나 과제입니다 [feat] 2주차 세미나 과제 Apr 16, 2024
@choyeongju choyeongju changed the title [feat] 2주차 세미나 과제 [feat] 2주차 과제 제출 Apr 16, 2024
Copy link

@Parkjyun Parkjyun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

영주님 과제하시느라 고생하셨습니다~

질문 주신 것 중에서 예외처리를 어떻게 적절하게 하느냐에 대해 물어보셨는데요

세미나 중에 팟장님이 말씀해주시겠지만 미라 간력하게 말씀을 드리자면
앱잼이나 프로젝트를 하게 되시면 controlleradvice를 통해 지금처럼 trycatch를 로직마다 작성하는 것이 아니라 전역적으로 예외들을 처리하게 됩니다.

예외처리에 관한 더 자세한 내용은 세미나 때 팟장님께 들으면 될 것 같아요!

@Transactional
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/member") //어디로 요청이 들어올거냐?를 보는 것.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rest api에서 리소스는 복수형을 쓰는 것을 더 선호한다고 알고 있습니다!

}

//기존 세미나 코드에서 이 부분 추가
@GetMapping("/memberList")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위에서 언급드린 것과 같이
GET /api/v1/members라고 하면
전체 멤버 조회api에서
GET /api/v1/member/memberList라고 할 필요가 없을 것 같습니다.
이미 members라는 복수형에 멤버들을 갖고오겠다는 의미가 포함된 것이니까용
rest에 대해 한번 알아보시는 것을 추천드립니다!!

Comment on lines +47 to +54
try {
List<MemberFindDto> members = memberService.findAllMembers();
return ResponseEntity.ok(members);
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 부분에서는 굳이 예외를 잡을 필요가 없을 것 같습니당
멤버리스트를 검색을 했는데 결과가 없어서 빈리스트를 반환하는 것은 자연스러운 일이니까요

Comment on lines +40 to +49
//기존 세미나 코드에서 이 부분 추가
public List<MemberFindDto> findAllMembers() {
try {
return memberRepository.findAll().stream()
.map(MemberFindDto::of)
.collect(Collectors.toList());
} catch (Exception e) {
e.printStackTrace();
return null;
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위에서 언급드린 것과 마찬가지로 굳이 예외를 잡을 이유 없을 것 같습니다~

Member member = memberRepository.save(Member.create(memberCreate.name(), memberCreate.part(), memberCreate.age()));
return member.getId().toString();
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@transactional(readonly=true)붙이시는 것을 추천드립니다!

memberRepository.delete(member);
}

//기존 세미나 코드에서 이 부분 추가

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기도 마찬가지로 readonly=true해주세용

@softmoca
Copy link
Member

영주님 과제 하시느라 너무 고생 많으셨어요 !!

아직 어색한 프레임워크와 언어 문법에 대해 주석으로 개인적으로 정리하시는게 직관적으로 이해를 도와줘서 좋은것 같네요 !
그리구 제가 알기론 실제 코드상에서는 영주님과 같이 주석으로 자세한 설명은 지양하는걸로 알고 있습니다 !
이후 실제 프로젝트 들어가시기 전에 알면 좋을꺼 같아 알려드립니다 ! 개인 블로그나 노션에 정리해보시는거 추천 드려요 !

API 명세서는 올바르게 잘 작성 하신것 같아요 ! 나중에 로그인 구현과 같은 API 개발 하실 때는 헤더값을 만질 일이 생길꺼 같아 먼저 공부해보셔도 좋을꺼같습니다 ~
그리구 swagger 라는 API 문서화하는 도구가 있어 간단하게 살펴 보는것도 좋을것 같습니다 !

Copy link
Member

@kgy1008 kgy1008 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

먼저 과제하시느라 고생하셨어요!!

제 개인적인 생각으로는 API 명세서를 작성할 때, status 부분에서 단순히 success라고 작성하는 것 보다는 상태코드를 작성해주시면 더 자세하고 깔끔한 명세서가 될 것 같아요!!

수고하셨습니다:)

Comment on lines +46 to +54
public ResponseEntity<List<MemberFindDto>> findAllMembers() {
try {
List<MemberFindDto> members = memberService.findAllMembers();
return ResponseEntity.ok(members);
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

재연님이 이미 언급해주셨지만, 저 또한 이 부분은 굳이 예외 처리를 할 필요는 없을 것 같다는 의견에 동의합니다.

Copy link
Contributor

@sohyundoh sohyundoh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

과제하느라 고생하셨습니다!

이미 좋은 리뷰들이 많이 달려있네요!
구경하고 갑니다 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[week2] 세미나 2차 과제 _ 회원 목록 API 리스트로 구현
5 participants