Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- javascript
- Kubernetes
- OOP
- 알고리즘
- GraphQL
- Deep Dive
- 탐욕법
- 코딩테스트
- JWT
- Spring
- REST API
- node.js
- typescript
- nestjs
- 인접리스트
- css
- dfs
- 인접행렬
- html
- puppeteer
- Interceptor
- TIL
- MySQL
- 자료구조
- java
- LifeCycle
- bean
- winston
- 프로그래머스
- Linux
Archives
- Today
- Total
처음부터 차근차근
[REST API] REST API 설계 원칙 본문
728x90
Rest API 중심 규칙
Rest API 설계 시 가장 중요한 항목은 다음의 2가지로 요약할 수 있다.
- URI는 정보의 자원을 표현해야 한다.
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.
다른 것들은 다 잊어도 위 내용은 항상 지켜야 한다.
참고 리소스 원형
- 도큐먼트 : 객체 인스턴스나 데이터베이스 레코드와 유사한 개념, 간단하게 문서 혹은 객체로 이해
- 컬렉션 : 서버에서 관리하는 디렉터리라는 리소스, 문서들의 집합으로 이해하면 편하다.
- 스토어 : 클라이언트에서 관리하는 리소스 저장소
1. URI는 정보의 자원을 표현해야 한다.
- resource는 동사보다는 명사를, 대문자 보다는 소문자를 사용한다.
- resource의 도큐먼트 이름으로는 단수 명사를 사용해야한다.
- resource의 컬렉션 이름으로는 복수 명사를 사용해야한다.
- resource의 스토어 이름으로는 복수 명사를 사용해야한다.
-
- Ex) GET /Member/1 → GET /members/1
2. 자원에 대한 행위는 HTTP Method로 표현한다.
- URL에 HTTP Method가 들어가면 안된다.
- Ex) GET /members/delete/1 → DELETE /members/1
- URL에 행위에 대한 동사 표현이 들어가면 안된다. (즉, CRUD 기능을 나타내는 것은 URL에 사용하지 않는다.)
- Ex) GET /members/show/1 → GET /members/1
- Ex) GET /members/insert/2 → POST /members/2
- 경로 부분 중 변화하는 부분은 유일한 값으로 대체한다. (즉, :id는 하나의 특정 resource를 나타내는 고유값이다.)
- Ex) student를 생성하는 route : POST /students
- Ex) id=12인 student를 삭제하는 route : DELETE /students/12
REST API 설계 시 주의할 점
1. 슬래시 구분자(/ )는 계층 관계를 나타내는데 사용한다.
- http://restapi.example.com/houses/apertments
- http://restapi.example.com/animals/mammals/whales
2. URL 마지막 문자로 슬래시(/ )를 포함하지 않는다.
- URL에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며,
URL가 다르다는 것은 리소스가 다르다는 것이고,역으로 리소스가 다르면 URL도 달라져야한다. - REST API는 분명한 URL를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URL 경로의 마지막에는 슬래시(/ )를 사용하지 않는다.
3. 하이픈(- )은 URL 가독성을 높이는데 사용한다.
- 불가피하게 긴 URL경로를 사용하게 된다면 하이픈을 사용해 가독성을 높여준다.
4. 밑줄(_ )은 URL에 사용하지 않는다.
- 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 가독성을 위해 밑줄은 사용하지 않는다.
5. URL 경로에는 소문자가 적합하다.
- URL 경로에 대문자 사용은 피하도록 한다.(가독성의 이유)
- PFC 3986(URL 문법 형식)은 URL 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문이다.
6. 파일확장자는 URL에 포함하지 않는다.
- REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URL안에 포함시키지 않는다.
- Accep header를 사용한다.
- Ex) http://restapi.example.com/members/soccer/345/photo.jpg (X)
- Ex) GET /members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)
7. 리소스 간에는 연관 관계가 있는경우
- /리소스명/리소스 ID/관계가 있는 다른 리소스명
- Ex) GET : /users/{userid}/devices (일반적으로 소유 'has'의 관계를 표현할 때)
만약에 관계명이 복잡하다면 이를 서브 리소스에 명시적으로 표현하는 방법이 있습니다. 예를 들어 사용자가 ‘좋아하는’ 디바이스 목록을 표현해야 할 경우 다음과 같은 형태로 사용될 수 있습니다.
- GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)
참조
'CS > HTTP' 카테고리의 다른 글
[GraphQL] GraphQL이란? (0) | 2023.11.24 |
---|---|
[REST API] REST API란? (0) | 2023.10.20 |