일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- PostgreSQL
- AOP
- Java
- 서브셋폰트
- dfs
- 디자인 패턴
- netlify
- 동적계획법
- npm
- CSS
- mock
- 상속
- 메모이제이션
- MariaDB
- Solid
- 다형성
- 캡슐화
- git
- GOF
- bfs
- 객체지향
- 추상화
- 클라우드
- dotenv
- azure
- package
- github
- DP
- Secret
- process.env
- Today
- Total
이것저것 해보기🌼
[프로그래머스 과제관] 주문 관리 API 서버 개발 본문
https://programmers.co.kr/skill_check_assignments/34
요건 1. API 응답 포맷
정상처리 및 오류처리에 대한 API 서버 공통 응답 포맷을 아래와 같이 정의 합니다.
- 정상처리 및 오류처리 모두 success 필드를 포함합니다.
- 정상처리라면 true, 오류처리라면 false 값을 출력합니다.
- 정상처리는 response 필드를 포함하고 error 필드는 null 입니다.
- 응답 데이터가 단일 객체라면, response 필드는 JSON Object로 표현됩니다.
- 응답 데이터가 스칼라 타입(string, int, boolean)이라면, response 필드는 string, int, boolean로 표현됩니다.
- 응답 데이터가 Collection이라면, response 필드는 JSON Array로 표협됩니다.
- 오류처리는 error 필드를 포함하고 response 필드는 null 입니다. error 필드는 status, message 필드를 포함합니다.
- status : HTTP Response status code 값과 동일한 값을 출력해야 합니다.
- message : 오류 메시지가 출력 됩니다.
힌트: @ControllerAdvice 어노테이션이 적용되있는 com.github.prgrms.errors.GeneralExceptionHandler 구현을 참고하세요.
이미 구현되 있는 아래 2개 API는 응답 포맷이 요건 1 정의에 맞지 않기 때문에 수정이 필요합니다.
- 단일 상품 조회: /api/products/{id}
- 구현위치: com.github.prgrms.products.ProductRestController.findById 메소드
- 상품 목록 조회: /api/products
- 구현위치: com.github.prgrms.products.ProductRestController.findAll 메소드
그 외 API는 요건 1을 만족하도록 개발을 시작하세요.
힌트: com.github.prgrms.users.UserRestController 구현을 참고하세요.
풀이
우선 이미 구현되어있는 2개의 API (product) 를 수정하는 부분부터 시작해보자.
터미널에서 서버를 스타트시키고, postman 으로 '상품 목록 조회' 를 GET 으로 보내보았다.
GET https://~~~~/web/api/products
응답으로 아래와 같은 product 리스트가 나오는 것을 확인할 수 있다.
하지만 이렇게 나와선 안되고 요건과 같이 success, error 필드도 같이 보내줘야한다.
"success" : "true"
"response" : 리스트의 내용
"error" : null
[
{
"seq": 3,
"name": "Product C",
"details": "Very good product",
"reviewCount": 0,
"createAt": "2021-07-08 11:23:04"
},
{
"seq": 2,
"name": "Product B",
"details": "Almost sold out!",
"reviewCount": 1,
"createAt": "2021-07-08 11:23:04"
},
{
"seq": 1,
"name": "Product A",
"details": null,
"reviewCount": 0,
"createAt": "2021-07-08 11:23:04"
}
]
확인해보니 없는 상품을 조회해서 실패하는 경우에는 또 정상적으로 응답필드가 채워져 오는것을 볼수 있었다.
그래서 계속해서 코드를 뒤져보니, ApiUtils.java 에 응답 보내주기가 잘 구현되어있는 것을 찾을수 있었다.
ProductRestController 원래의 코드에서 success() 함수를 리턴해주는 것으로 Product 테스트는 가볍게 통과가 가능했다.
이제 Users 패키지에서도 마찬가지로, UserRestController가 정상적인 응답을 보내주도록 구현하면 되겠다.
근데 User 로그인은 이미 모두 구현이 되어있는지 테스트가 기본으로 All passed 였다;
혹시나해서 Postman 으로도 POST 로그인 테스트를 수행해보니 정상 작동했다.
요건 2. 공개용 API 및 인증 사용자용 API 구분
API는 사용자가 로그인하지 않아도 호출할 수 있는 공개용 API와 로그인 후 호출할 수 있는 인증 사용자용 API로 구분됩니다.
- 공개용 API
- 로그인: /api/users/login
- 단일 상품조회: /api/products/{id}
- 상품 목록조회: /api/products
- 인증 사용자용 API
- 내 정보 조회: /api/users/me
- 주문 리뷰작성: /api/orders/{id}/review
- 주문 접수처리: /api/orders/{id}/accept
- 주문 배송처리: /api/orders/{id}/shipping
- 주문 완료처리: /api/orders/{id}/complete
- 주문 거절처리: /api/orders/{id}/reject
- 단일 주문조회: /api/orders/{id}
- 주문 목록조회: /api/orders
로그인 응답에는 token 필드가 포함되 있습니다.
인증 사용자용 API를 호출하기 위해 요청 헤더에 X-PRGRMS-AUTH 항목을 추가하고, 값으로 로그인 후 전달받은 token에 Bearer 키워드를 앞에 붙여 입력합니다.
인증 사용자용 API 호출시 X-PRGRMS-AUTH 헤더가 누락되거나 값이 올바르지 않다면 아래와 같은 오류 응답이 발생합니다.
풀이
로그인 성공시 나오는 token 이 이후 인증절차에 필요하다.
아래 메뉴부터 테스트해보자.
- 내 정보 조회: /api/users/me
Header에 X-PRGRMS-AUTH 필드에 " Bearer " 뒤에 로그인 성공시 나왔던 token 내용을 넣고 GET 을 호출해보면 success 응답을 받는다.
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJyb2xlcyI6WyJST0xFX1VTRVIiXSwiaXNzIjoicHJvZ3JhbW1lcnMiLCJuYW1lIjoidGVzdGVyIiwiaWF0IjoxNjI1NzIxODg1LCJ1c2VyS2V5IjoxfQ.aooiAeoK3z_r25KrBifhe-Eni0Cv0yIfa2pfrOFehOsOwp_0yIVWrAiaUvzPtDvIfHxg1euZcowmHLCyPHe8_g"
응답:
우선 이 점에만 유의해두고, 대망의 요건 3에 해당하는 orders 와 reviews 를 구현하면 되겠다.
'BE > Spring Boot' 카테고리의 다른 글
java.lang.ClassNotFoundException: org.h2.Driver - H2 연결 에러 해결 (0) | 2024.05.07 |
---|---|
[웹] 세션 (0) | 2021.08.29 |
[JUnit] CRUD 테스트코드 작성하기 (0) | 2021.07.06 |
[Open API] 네이버 Open API 사용하기 (0) | 2021.07.06 |
Validation, Exception 처리하기 (0) | 2021.07.05 |