[네트워크] REST, RESTful API의 개념 및 설계 가이드

출처 : https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

 

1. REST란?

REST란 Representational State Transfer의 약자로 자원을 이름으로 구분하여 자원의 상태를 주고받는 것을 의미한다. HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 행위를 적용한다.

1-1. REST 구성요소

  • 자원(Resource) : HTTP URI - 서버는 고유한 리소스 식별자로 각 리소스를 식별
  • 행위(Verb) : HTTP Method (GET, POST, PUT, DELETE)
  • 내용(Representations) : HTTP Message Pay Load - 하나의 자원은 JSON,XML, TEST, RSS 등 여러 형태의 Representaion으로 나타내어질 수 있다.

1-2. REST의 특징

  • Stateless (무상태성) - 서버가 이전의 모든 요청과 독립적으로 클라이언트 요청을 완료함을 의미
  • Cacheable(캐쉬 가능성) - 일부 응답을 저장하는 프로세스인 캐싱을 지원함을 의미
  • Layered System (계층화) - 클라이언트는 REST API Server만 호출하지만, 클라이언트 요청을 이행하기 위해 함께 작동하는 비즈니스 로직(보안, 암호화 등)을 여러 계층으로 실행될 수 있도록 유연하게 설계 가능함을 의미
  • Uniform Interface (균일한 인터페이스) - 서버가 표준 형식으로 정보를 전송함을 의미

1-3. 장점

  • HTTP 프로토콜을 그대로 사용하기에 별도 인프라를 구축할 필요가 없음
  • HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능
  • API의 의도를 쉽고 명확하게 파악 가능
  • 클라이언트, 서버를 완전히 분리하기에 각 부분이 독립적으로 발전 가능
  • 사용되는 기술과 독립적이기에 API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 작성이 가능

1-4. 단점

  • 표준이 존재하지 않아 정의가 필요함
  • HTTP Method 형태가 제한적

2. RESTful API란?

REST 아키텍쳐를 따르는 API를 RESTful API (Representaional state transfer API)라고 하며 REST 아키텍처를 구현하는 웹서비스를 RESTful 웹 서비스라고 한다. REST는 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어 졌으며, 대규모의 고성능 통신을 안정적으로 지원할 수 있고 쉽게 구현 및 수정할 수 있어 파악에 용이하고 여러 시스템에서 사용이 가능하다.

3. RESTful API 설계

  • 동사 보다는 명사, 대문자보다 소문자 사용
/getArticles/1 -> /articles/1
  • 컬렉션 이름으로는 복수 명사 사용
/article/1 -> /articles/1
  • HTTP Method를 포함하지 않음
/get/articles/1 -> GET /articles/1
  • 행위에 대한 동사 표현이 포함하지 않음
/show/articles/1 -> /articles/1
  • 경로 부분 중 변하는 부분은 유일값으로 대체
/articles/{articleId} -> 각 articleId은 유일한 결과값을 가진다.
  • 마지막에 / 포함하지 않음
/articles/1/ -> /articles/1
  • 언더바 대신 하이픈 사용
/newest_ariticles/1 -> /newest-ariticles/1
  • 파일 확장자는 URI에 포함하지 않음
/articles/1/photo.jpg -> /articles/1/photo [Accept: image/jpg]

 

 

 

 

 

 

 

참고 

 

https://aws.amazon.com/ko/what-is/restful-api/

https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80