일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 비트마스킹
- 메모이제이션
- Zuul
- Spring Cloud Config
- Java
- 게이트웨이
- 서비스 디스커버리
- spring cloud
- 백트래킹
- 완전 탐색
- 스택
- 구현
- 도커
- 스프링 시큐리티
- dp
- Gradle
- spring boot
- 다익스트라
- Logback
- docker-compose
- 주울
- 유레카
- BFS
- 이분 탐색
- 트리
- 달팽이
- 플로이드 와샬
- 구간 트리
- 이분 매칭
- ZuulFilter
- Today
- Total
Hello, Freakin world!
고객 도메인 RESTful api 1차 완성 본문
시간이 엄청나게 걸렸다.
간단한 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를 이용해 추가한 후, 아무 설정도 하지 않았다면 "/"에 매핑되어 있다.
데이터를 하나 넣으면 아래와 같이 customers[0]처럼 링크가 나타난다. 링크를 눌러보면 또 다른 링크들이 나타난다.
뭐 이런 식으로 테스트할 수 있다.
하이퍼미디어가 들어가면 REST api를 처음 만들어 봤는데, 사용자 입장에서는 꽤 유용할 거라는 생각이 들었다.
위처럼 사용자는 한 눈에 customer 객체로 할 수 있는 api를 확인할 수 있다.
지금은 api 계층이 깊지 않아서 그렇지만, 복잡한 경우 언제 어느 시점에 이 api를 호출해야 하는지
사용자는 api를 탐색해가면서 알 수 있다.
진짜 웹 페이지를 탐색하는 것과 같다. 나도 그 생각을 하면서 링크들을 추가했다.(위 링크들은 직접 추가한 것들이다.)
이것만 따로 떼도 꽤 할 얘기가 많은데 참 ㅋㅋㅋㅋ 정리할 것도 많은데 하하...
https://github.com/johnna-endure/myshop/tree/develop
코드는 develop 브랜치에서 실행 가능합니다.
혹시나 관심이 있으신 분은 MyshopApplicatiion 클래스에 주석처리 해놓은 테스트용 데이터가 있으니 참고하세용
'Toy Project > 쇼핑몰 만들기 프로젝트' 카테고리의 다른 글
Item 엔티티 추가 (0) | 2020.08.18 |
---|---|
RESTful 구현 기술 선택 (0) | 2020.07.08 |
User 엔티티명 Customer로 수정, Jpa Auditing 적용 (0) | 2020.07.06 |
User 엔티티 작성하기 (0) | 2020.07.04 |
쇼핑몰 v1.0 설계하기 (0) | 2020.07.04 |