서버(Server)

REST API URL 규칙

2025. 3. 13. 14:00
목차
  1. 리소스 명사는 복수형으로
  2. URL에 kebab-case 사용, parameter에 camelCase 사용
  3. 리소스 URL에 동사 금지
  4. 단, CRUD 작업이 아닌 경우에는 동사 사용 가능
  5. 리소스 리스트에는 리소스 갯수 포함
  6. PUT vs. PATCH
  7. Nested resource
  8. 다수의 리소스 생성/수정/삭제
  9. Reference
728x90

리소스 명사는 복수형으로

# Good
/language-tests

# Bad
/language-test

URL에 kebab-case 사용, parameter에 camelCase 사용

# Good
/language-tests
/language-tests/{testId}

# Bad
/language_tests/{test-id}
/languageTests/{test_id}

리소스 URL에 동사 금지

# Good
POST /language-tests

# Bad
POST /language-tests/create

단, CRUD 작업이 아닌 경우에는 동사 사용 가능

POST /language-tests/123/revalidate

리소스 리스트에는 리소스 갯수 포함

GET /language-tests

# Response
{
		languageTests: [
			...
		],
		total: 42
}

PUT vs. PATCH

둘의 역할은 모두 업데이트로 같지만, PATCH는 제공된 필드만 업데이트하고 나머지는 그대로 유지합니다.

Nested resource

GET /posts/2/comments
DELETE /posts/2/comments/3

위와 같이 중첩된 리소스를 표현할 수 있습니다.

이때, 리소스를 nested로 표현할지, flat하게 표현할지 고민이 될 수 있습니다.

# Nested
GET /posts/2/comments/3
# Flat
GET /comments/3

각 방법마다 trade-off가 존재하겠지만, 어떤 방법을 선택할지 고민이 된다면 대부분 flat 한것이 nested보다 낫다는 것을 기억해야합니다.

다수의 리소스 생성/수정/삭제

POST /posts/batch 와 같은 API endpoint를 만들어 사용한다.

이때 GET 대신 POST를 사용하는 이유는 GET에는 body를 사용할 수 없기 때문이다. 또한 한 요청에 여러 GET, POST, PATCH등이 들어갈 수 있기에 멱등성을 지키지 않는 POST를 쓰는게 일반적이다. 배치 요청 자체가 RESTful API에 크게 부합하는 구조는 아니니 RESTful API 원칙을 너무 신경쓰지 않아도 좋아 보인다.

RFC 7231상 GET에도 body를 담을 수 있으나, 실질적으로 이를 구현하는 프로그램이 별로 없다

 

고민해보아야 할 부분은, 일부 실패시 전체 트랜잭션을 취소할것인지 여부나 최대 배치 작업 개수 한도등이 있겠다.

Reference

[번역] 22 Best Practices to Take Your API Design Skills to the Next Level

 

[번역] 22 Best Practices to Take Your API Design Skills to the Next Level

REST API 설계를 위한 실용적인 조언

velog.io

https://www.codementor.io/blog/batch-endpoints-6olbjay1hd

 

Adding batch or bulk endpoints to your REST API

A comprehensive guide on what batch endpoints are, why they're useful, and how they can be added to existing REST APIs.

www.codementor.io

 

728x90

'서버(Server)' 카테고리의 다른 글

Firebase 예시로 살펴보는 JWT  (0) 2025.05.12
Firebase Authentication으로 Firestore 어드민 권한 관리하기  (0) 2025.05.10
소셜 로그인 DB 설계  (0) 2023.07.30
  • 리소스 명사는 복수형으로
  • URL에 kebab-case 사용, parameter에 camelCase 사용
  • 리소스 URL에 동사 금지
  • 단, CRUD 작업이 아닌 경우에는 동사 사용 가능
  • 리소스 리스트에는 리소스 갯수 포함
  • PUT vs. PATCH
  • Nested resource
  • 다수의 리소스 생성/수정/삭제
  • Reference
Wibaek
생쥐 개발자
Wibaek
총 방문
오늘
어제
  • 전체보기 (118) N
    • 서버(Server) (4)
      • 장고 (Django) (20)
      • 스프링 (Spring) (0)
      • 파이썬 (Python) (8)
      • 자바 (Java) (1)
    • 프론트엔드 (Frontend) (4)
    • 인프라 (Infra) (11)
    • 알고리즘 (Algorithm), PS (4)
      • Baekjoon Online Judge (3)
    • CS (22)
      • 자료구조 (Data Structure) (19)
    • Troubleshooting (10)
    • 회고 & 기록 (11)
    • 기타 (Other) (14) N
    • 하나도 안 중요함 (7)

인기 글

250x250
hELLO · Designed By 정상우.
Wibaek
REST API URL 규칙
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.