요구사항
- 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에서 책에 대한 내용을 받아온다.
{ "lastBuildDate": "Wed, 27 Jul 2022 14:44:01 +0900", "total": 9167, "start": 1, "display": 10, "items": [ { "title": "이펙티브 <b>타입</b>스크립트 (동작 원리의 이해와 구체적인 조언 62가지)", "link": "http://book.naver.com/bookdb/book_detail.php?bid=20611649", "image": "https://bookthumb-phinf.pstatic.net/cover/206/116/20611649.jpg?type=m1&udate=20210610", "author": "댄 밴더캄", "price": "25000", "discount": "22500", "publisher": "인사이트", "pubdate": "20210622", "isbn": "8966263135 9788966263134", "description": "<b>타입</b>스크립트는 <b>타입</b> 정보를 지닌 자바스크립트의 상위 집합으로, 자바스크립트의 골치 아픈 문제점들을 해결해 준다. 이 책은 《이펙티브 C++》와 《이펙티브 자바》의 형식을 차용해 <b>타입</b>스크립트의 동작 원리, 해야 할 것과 하지 말아야 할 것에 대한 구체적인 조언을 62가지 항목으로 나누어 담았다.\n각... " }, { "title": "뉴<b>타입</b>의 시대 (예측 불가능한 미래를 돌파하는 24가지 생각의 프레임)", "link": "http://book.naver.com/bookdb/book_detail.php?bid=16374059", "image": "https://bookthumb-phinf.pstatic.net/cover/163/740/16374059.jpg?type=m1&udate=20220305", "author": "야마구치 슈", "price": "16000", "discount": "14400", "publisher": "인플루엔셜", "pubdate": "20200612", "isbn": "1189995638 9791189995638", "description": "『뉴<b>타입</b>의 시대』는 새로운 시대에 필요한 생각의 프레임, 의미와 가치를 발견하는 비즈니스 전략, 지식 습득의 방법론 등을 ‘올드<b>타입</b>’과 ‘뉴<b>타입</b>’의 대조를 통해 단 한 권으로 명쾌하게 제시하는 책이다. 그에 따르면, 앞으로는 성실하고 논리적인 엘리트보다 자신만의 철학과 직감에 따라 왕성한... " },
isbn 을 통해 현재 서버에 책이 있는지 없는지 여부를 확인하는 요청을 보내는 것이 아닌,
{ title, link, image, isbn….} 이런 item 하나의 데이터 전체를 PUT 로 날려주면, 우리는 “책 id” 만을 리턴해주도록 할 수 있다 ( 없으면 생성, 있으면 전체를 업데이트하는 의미의 HTTP method put 을 사용해볼까? )
- 내부적으로는, 백엔드 에서는 해당 책이 존재하지 않으면 저장하고, 존재하면 id 만을 보낸다. → 결과적으로 현재 우리 서버에 존재하는 유효한 책에 대한 id 를 보내기에 스터디 생성은 가능할 것이다
- 하지만 현재 작업플로우상 프론트에서 “네이버 api “ 요청을 하고 그 결과를 받아서, 우리 디비에서 확인하고 우리 디비에 저장하려는 플로우다보니 생기는 문제다.