REST 구성
- 자원(Resource) - URI
- 행위(Verb) - HTTP Method
- 표현(Representations)
REST 특징
- 자원(Resource) - URI를 통해 자원을 명시하고, HTTP 메소드를 사용하여 해당 자원에 대한 CRUD 작업을 수행합니다.
- 메시지(Message) - RESTful API에서는 HTTP 프로토콜의 메시지 포맷을 이용하여 요청과 응답을 처리합니다. 예를 들어, JSON, XML 등의 포맷을 사용할 수 있습니다.
- Stateless(무상태성) - RESTful API는 서버 측에서 상태 정보를 유지하지 않고, 요청에 대한 응답만 전달합니다. 이러한 특징을 가지기 때문에, 서버의 확장성과 성능을 높일 수 있습니다.
- 캐시(Cache) - RESTful API에서는 HTTP 프로토콜의 캐시 기능을 이용하여 캐시를 적극적으로 사용할 수 있습니다. 이를 통해, 클라이언트와 서버 간의 통신을 최적화할 수 있습니다.
- 인터페이스(Interface) - RESTful API는 클라이언트와 서버 간의 인터페이스를 일관성 있게 유지하도록 설계됩니다. 이를 통해, 클라이언트와 서버 간의 상호 작용을 단순화하고, 상호 운용성(interoperability)을 향상시킬 수 있습니다.
- 계층형 구조(Layered System) - RESTful API에서는 서버와 클라이언트 사이에 다양한 계층을 둘 수 있습니다. 이를 통해, 시스템의 확장성과 보안성을 향상시킬 수 있습니다.
- 자체 표현(Self-descriptive) - RESTful API는 메시지 자체에 대한 정보를 포함하고 있기 때문에, 메시지를 이해할 수 있는 자체 표현 형식을 사용합니다. 이를 통해, 클라이언트와 서버 간의 상호 작용을 간소화하고, 확장성을 향상시킬 수 있습니다.
RESTful API 디자인 가이드
1. URI 마지막에 슬래시(/)를 포함하지 않는다.
- URI 경로 마지막은 반드시 문자여야 한다. 슬래시(/) 다음에 의미 있는 값을 추가하지 않으면 혼동이 올 수 있다.
X : http://api.test.com/users/
O : http://api.test.com/users
2. 슬래시(/)를 사용하여 계층적 관계를 나타낸다.
- 슬래시 문자는 리소스 간의 계층적 관계를 나타내기 위해 URI 경로에 사용된다.
ex) http://api.test.com/users/1/posts
3. URI 가독성을 높이려면 하이픈(-)을 사용해야한다.
- URI를 사람들이 쉽게 스캔하고 해석 할 수 있도록 하이픈(-) 문자를 사용하여 가독성을 높인다. 영어로 공백이나 하이픈을 사용하면 URI에서는 모두 하이픈을 사용해야 한다.
X : http://api.test.com/users/posts_comments
O : http://api.test.com/users/posts-comments
4. URI는 소문자를 사용해야한다.
X : http://api.test.com/users/postsComments
O : http://api.test.com/users/posts-comments
5. 행위(Method)는 URI에 포함하지 않는다.
X : http://api.test.com/users/1/delete-post/1
O : http://api.test.com/users/1/posts/1
6. 파일 확장자는 URI에 포함하지 않는다.
X : http://api.test.com/users/1/posts/1/photo.jpg
O : http://api.test.com/users/1/posts/1/photo
HTTP 응답 상태코드
상태코드
200 | 클라이언트의 요청을 정상적으로 수행함 |
201 | 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨 (POST를 통한 리소스 생성 작업 시) |
상태코드
400 | 클라이언트의 요청이 부적절 할 경우 사용하는 응답 코드 |
401 | 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답 코드 |
(로그인 하지 않은 유저가 로그인 했을 때, 요청 가능한 리소스를 요청했을 때) | |
403 | 유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드 |
(403 보다는 400이나 404를 사용할 것을 권고. 403 자체가 리소스가 존재한다는 뜻이기 때문에) | |
405 | 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우 사용하는 응답 코드 |
상태코드
301 | 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용하는 응답 코드 |
(응답 시 Location header에 변경된 URI를 적어 줘야 합니다.) | |
500 | 서버에 문제가 있을 경우 사용하는 응답 코드 |