본문 바로가기
Q&A해결2024년 5월 18일1분 읽기

REST API 설계 시 URL 네이밍 컨벤션 질문

A
API설계중
조회 833댓글 4

REST API를 처음 설계하고 있는데 URL 네이밍을 어떻게 해야 할지 모르겠습니다.

# 어떤 게 맞는 건가요?
GET /getUsers       vs  GET /users
GET /user/1         vs  GET /users/1
POST /createUser    vs  POST /users
GET /users/search?q=kim  vs  GET /search/users?q=kim

복수형을 써야 하는지, 동사를 URL에 넣어도 되는지, 중첩 리소스는 어디까지 깊이 들어가야 하는지 기준이 궁금합니다.

댓글 4

김김영삼2년 전

REST API 네이밍에는 업계에서 널리 쓰이는 컨벤션이 있습니다.


핵심 원칙:


# 1. 명사 복수형 사용 (동사 X)
GET /users # 목록 조회
GET /users/1 # 단건 조회
POST /users # 생성
PUT /users/1 # 전체 수정
PATCH /users/1 # 부분 수정
DELETE /users/1 # 삭제

# 2. 중첩은 2단계까지만
GET /users/1/posts # OK
GET /users/1/posts/5/comments # 너무 깊음
GET /posts/5/comments # 이렇게 분리

# 3. 필터/검색은 쿼리 파라미터
GET /users?role=admin&sort=name
GET /users?q=kim

# 4. kebab-case 사용
GET /user-profiles (O)
GET /userProfiles (X)
GET /user_profiles (X)

URL에는 동사를 넣지 않습니다. HTTP 메서드(GET, POST, PUT, DELETE)가 이미 동사 역할을 하니까요. /getUsers 대신 GET /users로 충분합니다.

AAPI설계중(guest)김영삼2년 전
감사합니다! 그런데 로그인이나 비밀번호 변경 같은 동작은 어떻게 표현하나요? POST /login 이런 식으로 써도 되는 건가요?
김김영삼API설계중2년 전

좋은 질문입니다! 로그인처럼 CRUD에 맞지 않는 동작은 예외적으로 동사를 쓰거나 리소스로 바꿔서 표현합니다:


# 방법 1: 동작을 리소스로 변환
POST /sessions # 로그인 (세션 생성)
DELETE /sessions # 로그아웃 (세션 삭제)
POST /password-resets # 비밀번호 초기화 요청

# 방법 2: 동사 허용 (실용적 접근)
POST /auth/login
POST /auth/logout
POST /users/1/change-password

실무에서는 방법 2를 많이 씁니다. REST 원칙을 100% 지키는 것보다 API가 직관적이고 사용하기 편한 게 더 중요합니다.

AAPI설계중(guest)김영삼2년 전
세션을 리소스로 보는 관점이 신선하네요. 덕분에 API 설계 방향이 확실히 잡혔습니다. 감사합니다!
Ctrl+Enter로 등록