Hello, Freakin world!

고객 도메인 RESTful api 1차 완성 본문

Toy Project/쇼핑몰 만들기 프로젝트

고객 도메인 RESTful api 1차 완성

johnna_endure 2020. 7. 19. 21:38

시간이 엄청나게 걸렸다.

간단한 CRUD라도 테스트를 일일이 작성하고 예외처리, validation 등 견고한 코드를 작성하는건 꽤 어려운 일이었다.

 

구현한 것들

- api 응답에 하이퍼미디어 추가

- ControllerAdvice를 이용한 예외처리

- api 메서드 마다 단위테스트 추가

 

구현 보류한 것들

- AOP이용한 validation : AOP에 대한 학습이 더 필요하다. 

 

휴~ 일단 결과물부터 살펴보자.

/customers 는 고객 도메인의 aggregate root의 진입점에 해당한다. 

페이징 파라미터를 따로 추가하지 않으면 size = 5다. 

굳이 이렇게 말하지 않아도 응답에 _link 객체의 all의 href를 보거나, 여기서는 보이지 않지만 self 속성의 href 속성을 보면

어떤 파라미터를 지원하는지 알 수 있다.

 

사용자는 따로 문서를 읽지 않아도 해당 응답들을 관찰하는 것만으로 사용법을 유추할 수 있다.

 

하지만 웹 브라우저에서 해당 링크를 클릭하는 것만으로 해당 기능이 수행되지는 않는다.

브라우저에서 링크를 클릭하면 내부에서 http method가 GET 방식이 되어버리기 때문이다.

 

링크들을 테스트하면 Spring HAL browser를 하거나 PostMan 등을 사용해야 한다.

 

HAL browser는 spring boot starter를 이용해 추가한 후, 아무 설정도 하지 않았다면  "/"에 매핑되어 있다.

 

해당 url로 리다이렉트되면서 이런 화면이 나타난다.

데이터를 하나 넣으면 아래와 같이 customers[0]처럼 링크가 나타난다. 링크를 눌러보면 또 다른 링크들이 나타난다.

 

 

뭐 이런 식으로 테스트할 수 있다.

 

하이퍼미디어가 들어가면 REST api를 처음 만들어 봤는데, 사용자 입장에서는 꽤 유용할 거라는 생각이 들었다.

위처럼 사용자는 한 눈에 customer 객체로 할 수 있는 api를 확인할 수 있다. 

지금은 api 계층이 깊지 않아서 그렇지만, 복잡한 경우 언제 어느 시점에 이 api를 호출해야 하는지

사용자는 api를 탐색해가면서 알 수 있다.

 

진짜 웹 페이지를 탐색하는 것과 같다. 나도 그 생각을 하면서 링크들을 추가했다.(위 링크들은 직접 추가한 것들이다.)

 

이것만 따로 떼도 꽤 할 얘기가 많은데 참 ㅋㅋㅋㅋ  정리할 것도 많은데 하하...

 

https://github.com/johnna-endure/myshop/tree/develop

 

johnna-endure/myshop

Contribute to johnna-endure/myshop development by creating an account on GitHub.

github.com

코드는 develop 브랜치에서 실행 가능합니다.

혹시나 관심이 있으신 분은 MyshopApplicatiion 클래스에 주석처리 해놓은 테스트용 데이터가 있으니 참고하세용  

Comments