RESTful WebService (1) - REST개념

박정민·2021년 3월 12일
0

RESTful

목록 보기
1/4

1. REST

REST란?

  • client와 server사이의 통신 방식 중 하나

  • Representational State Transfer: 대표적인 상태 전달

  • HTTP METHOD를 통해 자원을 처리하기 위한 아키텍쳐

  • 웹에 존재하는 모든 자원(이미지, 동영상, DB자원)에 고유한 URI를 부여해
    해당 자원의 상태를 주고 받는 것


REST구성요소

  • 자원(Resource) : URI

  • 행위(Verb) : HTTP Method(GET, POST, PUT, DELETE)

  • 표현(Representations) : 하나의 자원을 JSON, XML, TEXT등 여러 형태의 표현으로 나타낼 수 있다.

REST특징

  1. Uniform Interface(유니폼 인터페이스)
    • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능한 인터페이스 스타일
    • 특정 언어, 특정 플랫폼(안드로이드, IOS 등)에 종속되지 않고 사용 가능

  2. Stateless(무상태성)
    • HTTP 프로토콜은 Stateless Protocol이므로 REST역시 Stateless
    • Client의 context(세션, 쿠키 등등)를 Server에 저장하지 않는다.
    • 구현이 단순해진다.

  3. Cacheable(캐시 처리 가능)
    • HTTP의 기존 웹 표준을 그대로 사용하기 때문에 HTTP가 가진 캐싱 기능 적용이 가능

  4. Self-descriptiveness(자체 표현 구조)
    • REST API 메시지만 보고도 쉽게 이해할 수 있는 자체 표현 구조로 되어있다.

  5. Client-Server
    • REST Server는 API를 제공, Client는 사용자 인증이나 context를 직접 관리하는 구조
    • 각각의 역할이 확실히 구분되고, 서로간 의존성이 줄어들어, 개발해야할 내용이 명확해진다.
    • Server: 자원이 있는 쪽, Client: 자원을 요청하는 쪽

  6. Layerd System(계층 구조)
    • Client는 REST API Server만 호출
    • REST Server는 다중 계층으로 구성될 수 있다.
      • REST API서버는 순수 비지니스 로직을 수행하고, 앞단에 사용자 인증, 암호화 등을 수행하는 계층을 추가하여 구조상의 유연성을 둘 수 있다.

REST가 필요한 이유?

  1. 애플리케이션 분리 및 통합
    • 마이크로 서비스: 하나의 큰 애플리케이션을 여러개의 작은 서비스 단위로 쪼개서 개발하는 방식
    • RESTful API를 통해 분리된 서비스끼리 데이터 통신을 할 수 있다.
    • HTTP protocol을 사용하기 때문에 이런 분산 환경 서비스를 개발하기 쉽다.

  2. 다양한 클리이언트를 위해
    • RESTful API를 사용하면 데이터만 주고 받기 때문에 여러 클라이언트에서 자유롭고
      부담없이 데이터를 이용할 수 있다.
    • 플랫폼에 독립적이다.

2. REST API

REST API란?

  • API(Application Programming Interface)란?

    응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. -위키피디아

    • 프로그램들이 서로 상호작용하는 것을 도와주는 매개체

  • REST API
    • REST기반의 규칙들을 지켜서 설계된 API

REST API 설계 규칙

  1. URI는 정보의 자원을 표현해야 한다.
    • URI에 행위에 대한 표현이 들어가면 안된다. (ex. HTTP METHOD)
    • 자원의 이름은 동사보다 명사를 사용한다.
    • ex) /users/1


  2. 자원에 대한 행위는 HTTP METHOD로 표현한다. (ex. GET, POST, PUT, DELETE)
    • ex) GET /users/1 : ID가 1인 유저 정보를 가져오기

  3. 슬래시(/)는 계층 관계를 나타내는데 사용한다.
    • ex) http://example.com/school/classes

  4. URI 마지막은 슬래시(/)를 사용하지 않는다.
    • ex) http://example.com/school/classes/ [x]

  5. 하이픈(-)은 URI 가독성을 높이는데 사용한다.
    • URI경로가 긴 경우 하이픈(-)을 통해 가독성을 높인다.

  6. 언더바(_)는 URI에 사용하지 않는다.

  7. URI 경로에는 소문자가 적합하다.

  8. 파일확장자는 URI에 포함하지 않는다.
    • 메시지 바디 내용의 포맷을 나타내기 위한 파일확장자를 URI안에 포함 시키지 않는다.
    • ACCEPT header를 사용한다.

  9. 리소스 간의 연관관계를 표현하는 방법
    • ex) GET: /users/{userid}/devices
      • /리소스명/리소스ID/연관관계가 있는 다른 리소스명

3. RESTful

RESTful?

  • RESTful은 REST를 REST답게 쓰기 위한 방법으로 공식적인 용어는 아니다.

  • RESTful은 일반적으로 REST라는 아키텍처를 구현한 웹 서비스를 나타내기 위한 용어이다.
    • 'REST API'를 제공하는 웹 서비스를 'RESTful'하다고 할 수 있다.

  • RESTful의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것

  • REST API 설계 예시
CRUDHTTP METHODURI
Retrieve all UsersGET/users
Retrieve one UserGET/users/:id
Create UserPOST/users
Update UserPUT/users/:id
Delete UserDELETE/users/:id

References

profile
화이팅!

0개의 댓글