Backend/Spring

RESTful API

seung_soos 2023. 4. 23. 15:14

REST 구성

  • 자원(Resource) - URI
  • 행위(Verb) - HTTP Method
  • 표현(Representations)

REST 특징

  1. 자원(Resource) - URI를 통해 자원을 명시하고, HTTP 메소드를 사용하여 해당 자원에 대한 CRUD 작업을 수행합니다.
  2. 메시지(Message) - RESTful API에서는 HTTP 프로토콜의 메시지 포맷을 이용하여 요청과 응답을 처리합니다. 예를 들어, JSON, XML 등의 포맷을 사용할 수 있습니다.
  3. Stateless(무상태성) - RESTful API는 서버 측에서 상태 정보를 유지하지 않고, 요청에 대한 응답만 전달합니다. 이러한 특징을 가지기 때문에, 서버의 확장성과 성능을 높일 수 있습니다.
  4. 캐시(Cache) - RESTful API에서는 HTTP 프로토콜의 캐시 기능을 이용하여 캐시를 적극적으로 사용할 수 있습니다. 이를 통해, 클라이언트와 서버 간의 통신을 최적화할 수 있습니다.
  5. 인터페이스(Interface) - RESTful API는 클라이언트와 서버 간의 인터페이스를 일관성 있게 유지하도록 설계됩니다. 이를 통해, 클라이언트와 서버 간의 상호 작용을 단순화하고, 상호 운용성(interoperability)을 향상시킬 수 있습니다.
  6. 계층형 구조(Layered System) - RESTful API에서는 서버와 클라이언트 사이에 다양한 계층을 둘 수 있습니다. 이를 통해, 시스템의 확장성과 보안성을 향상시킬 수 있습니다.
  7. 자체 표현(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 서버에 문제가 있을 경우 사용하는 응답 코드