일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- utilty type
- NonNullable
- 개발콘텐츠
- 티스토리꾸미기
- 커스텀
- 폰트적용하기
- TSDoc
- React.js
- click and drag
- returnType
- 타입좁히기
- Chart.js
- CSS
- 공통컴포넌트
- const 단언문
- 제네릭
- typescript
- React Native
- react
- 반복줄이기
- 성능최적화
- 누구나 자료구조와 알고리즘
- 레이아웃쪼개기
- 리액트
- reactjs
- 타입스크립트
- javascript
- JS console
- vue.js
- 2022
- Today
- Total
몽땅뚝딱 개발자
REST API 사용 시 URL 구성 주의점 본문
REST API의 HTTP methods는 GET, POST, DELETE, PUT 등 많은 종류가 있다.
예전 프로젝트에서는 이들의 차이점을 모른 채 GET, POST만 사용했었다.
잠시 잊고 있던 찰나, 오늘 유튜브 알고리즘에 유튜버 노마드 코더님의 영상이 추천됐다.
그리고 워스트 케이스에 내가 있어 충격을 받았고 다른 강의를 듣기 전에 미리 정리하고자 한다.
나는 지금까지 API를 구성하며, 이런식으로 이름 지었다.
- getUserInfo: 유저의 정보를 가져오는 API
- selectLessonInfo: 현재 레슨정보를 가져오는 API
- setUserInfo: 유저의 정보를 수정하는 API
- updateCoaching: 코칭 정보를 수정하는 API
그 당시엔 이런 네이밍이 직관적이라 생각했다.
이렇게 동사를 사용하거나 get, select 같이 비슷한 역할의 단어를 중구난방으로 사용하는 것은
협업을 할 때도, 유지보수 측면에서도 좋은 방법이 아니라고 한다.
이 말을 듣고 나니 오히려 의미를 파악할 때 시간적으로나 가독성으로나 비효율적이라 생각된다.
가독성있게, 협업하기 좋은 방법으로 구성하는 법은 이러하다.
첫번째. URL로 CRUD를 구분할 수 있도록 한다.
두번째. 엔드포인트에서 동사를 사용하지 않는다.
예를 들어 각각의 나라들과 그 나라의 관광지 정보를 CRUD하는 API를 만들어보자!
CASE 1.
GET /countrys: 전체 나라 목록을 가져온다.
POST /countrys: 새로운 나라를 생성한다.
== 이 때, 여기서 PUT이나 DELETE를 사용할 일은 없다. 왜냐면 이것을 통째로 없애지는 않으니까!
CASE 2.
GET /countrys/korea: 전체 나라 목록 중 한국에 대한 정보를 가져온다.
== 개 중에 하나를 가져올 때는 이렇게 포인트를 하나 더 생성해준다.
CASE 3.
DELETE /countrys/korea: 전체 나라 목록에서 한국의 정보를 삭제한다.
== 이름을 길게 지을 필요없이 그냥 methods만 변경해주면 된다.
CASE 4.
GET /countrys/korea/spot: 한국의 관광지 정보를 가져온다.
PUT /countrys/korea/spot: 한국의 관광지 목록에 추가한다.
DELETE /countrys/korea/spot: 한국의 관광지 목록에서 삭제한다.
== 이렇게 url은 동일하지만 methods만 달라도 역할이 달라진다.
CASE 5.
/countrys?code=AD012
/countrys?name=korea&page=5
== query parameter를 활용하여 새로운 url을 굳이 생성하지않고, pagenation도 가능하다.
이 영상을 보며 다른 자료들도 찾아보았는데, 다들 공통적으로 말하는 것이 있었다.
URL에 해당 API의 내용을 유추할 수 있는 get, update 같은 직관적인 단어사용을 피해야 한다는 것!
'좀 더 좋은 방향'을 고려하는 시야가 +1 되었다.
'Development > API' 카테고리의 다른 글
API와 REST API (0) | 2021.11.03 |
---|---|
[Spring Boot] Instance 여러개 띄우기 / 랜덤 포트 설정 (0) | 2021.10.27 |
[Spring Boot] @RequestParam과 @PathVariable의 차이점 (0) | 2021.10.18 |