요구사항
- ISBN 값으로 해당 ISBN 값을 가진 책이 서버 디비에 존재하는지 여부를 응답받고 싶은데,
- 책이 있다면 ID 값
- 책이 없다면 0 또는 -1 값
다음의 값을 응답받고 싶다
의견
- ID 또는 0/-1 을 반환하는 것이 안되는 이유 (백)
- exist와 find의 의미가 혼재된다.
- 책이 존재하는지 안하는지를 판별하는 API -
exist 0 1(TRUE/FALSE)- 책을 찾는 api -
find - id / 404
- 존재하지 않는 리소스를 있는것 처럼 드린다는것 X
- 여러번 호출이 안되는 이유 (프)
- API 호출이 +1 늘어나는 것 부담 (부하가 가중될 수 있음)
- 404 공통으로 처리되는 부분에서 해당 부분만 로직을 따로 빼는것이 부담
- 책을 찾았을때 책이 없다는 부분이 에러로 처리하는 것이 아닌 새로운 로직을 시작해야 하는 부분이 설계적으로 지저분하다(에러가 아닌데 에러코드로 받는게 부담?)
404 는 “리소스가 없다" 라는 비즈니스로직에 해당하는 것
차라리 커스텀 에러코드가 더 나을 수 있다.
제안하는 방향
- 제안하는 방향(백)
- 프론트 404 처리..
API 두번 요청을 해서 id값을 최대한 받을 수 있는걸 보장받는 형식 vv- 두번 요청까지는 괜찮을 듯 하다.
- 제안하는 방향(프)
- 커스텀 에러코드가 필요할 수 있다 (7xx)
결론
데이터 조회가 아니라 입력 요청을 한다
- 프론트쪽에서는 책 등록이라는 개념이 사라지고 스터디 등록만 남음
API를 먼저 호출해서 해당 책이 존재하는지 확인하고 다음과 같이 요청을 나눕니다.
- 존재하지 않을 경우
네이버 API로 받아온 책에 대한 내용을 DB에 저장합니다.
- 존재하는 경우
DB에서 책에 대한 내용을 받아온다.
isbn 을 통해 현재 서버에 책이 있는지 없는지 여부를 확인하는 요청을 보내는 것이 아닌,
{ title, link, image, isbn….} 이런 item 하나의 데이터 전체를 PUT 로 날려주면, 우리는 “책 id” 만을 리턴해주도록 할 수 있다 ( 없으면 생성, 있으면 전체를 업데이트하는 의미의 HTTP method put 을 사용해볼까? )
- 내부적으로는, 백엔드 에서는 해당 책이 존재하지 않으면 저장하고, 존재하면 id 만을 보낸다. → 결과적으로 현재 우리 서버에 존재하는 유효한 책에 대한 id 를 보내기에 스터디 생성은 가능할 것이다
- 하지만 현재 작업플로우상 프론트에서 “네이버 api “ 요청을 하고 그 결과를 받아서, 우리 디비에서 확인하고 우리 디비에 저장하려는 플로우다보니 생기는 문제다.