본문 바로가기
Web/HTTP

[HTTP] REST

by foreverever 2022. 6. 1.
반응형

1. 정의

- REST는 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 웹 아키텍처 스타일(제약조건의 집합)

- 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 말함

- REST API는 REST를 기반으로 서비스 API를 구현한 것을 의미

 

2. REST 사용 이유

  1) 애플리케이션의 분리

거대한 애플리케이션을 모듈별로 분리함에 따라, REST API를 서비스하면 어떤 다른 모듈이나 애플리케이션들이라도 REST API를 통해 상호간에 원활한 통신을 할 수 있음

 

  2) 다양한 클라이언트의 등장

REST API를 사용하면서 데이터만 주고 받기 때문에 클라이언트가 부담없이 자유롭게 데이터를 사용할 수 있음

서버도 요청한 데이터만 깔끔하게 보내주면 되기 때문에 가벼워지고 유지보수도 용이

즉, 서버는 클라이언트(종류, 환경 등)를 고려할 필요 없이 독립적인 설계가 가능 

 

3. REST 구성

- 리소스(resource), 행위(verb), 표현(representations) 3가지 요소로 구성

요소 내용 표현 방법
리소스 자원 HTTP URI
행위 자원에 대한 행위 HTTP Method
표현 행위에 대한 구체적 내용 Payload(http body)

 

4. REST 아키텍처 스타일 종류

  • client-server
  • stateless 
  • cache
  • uniform interface
  • layered system
  • code-on-demand (optional)

 - HTTP 기반으로 구현하면 client-server, stateless, cache, layered system 스타일은 지켜짐

 - 가장 지키기 어려운 스타일 가이드는 uniform interface이다.

 

5. REST API 설계 원칙

 1) 리소스 표현 : URI

     - 리소스를 식별할 수 있는 이름으로 지어야 함

     - 리소스의 이름은 명사로 (행위가 들어가면 안됨)

 

 2) 행위에 대한 정의 : HTTP Method (GET, POST, PUT, DELETE..)

     - get/post에 대한 참고 자료

 

 3) URI 설계 시 주의사항

  • 슬래시 구분자(/)는 계층 관계를 나타내는 데 사용
  • URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
  • 하이픈(-)은 URI 가독성을 높이는데 사용
  • 밑줄(_)은 URI에 사용하지 않는다.
  • URI 경로에는 소문자가 적합하다.
  • 파일 확장자는 URI에 포함시키지 않는다.  (/members/1/profile.jpg (X))
1) GET(조회)
GET /members/show/1 (X)
GET /getMembers/1 (X)
: GET 자체는 조회의 행위를 의미하므로 show나 getMembers같은 행위(동사)의 단어를 사용하면 안된다

GET /members/1 (O) //1에 해당하는 회원 정보 조회
 
2) POST(생성)
POST /members/insert/2 (X)
POST /members (O)

3) PUT(수정)
PUT /members/modify/1 (X)
PUT /members/1 (O)

4) DELETE(삭제)
DELETE /members/delete/1 (X)
DELETE /members/1 (O)

4) 리소스 간의 관계를 표현하는 방법

  • /리소스명/리소스 ID/관계가 있는 다른 리소스명
GET /members/{memberid}/orders (일반적으로 소유 ‘has’의 관계를 표현할 때)
  • 관계명이 애매하거나 구체적인 표현이 필요할 때
GET /members/{memberid}/likes/orders
(예를 들어 사용자가 ‘즐겨찾는(좋아하는)’ 주문상품을 표현해야 할 경우)

 

 

참고하면 좋은 자료 (두고두고 보자)

1) REST API 제대로 알고 쓰기

2) 그런 REST API로 괜찮은가

 

반응형

'Web > HTTP' 카테고리의 다른 글

[HTTP] HTTP Status Code  (0) 2022.08.15
[HTTP] HTTP  (0) 2019.05.01
[HTTP] GET & POST  (0) 2019.05.01