RESTful

ROA (Resource Oriented Architecture)
자원 지향 아키텍처

Keyword HTTP Protocol로 데이터를 전달하는 프레임워크

리소스를 등록하고 저장해두는 * 중간 매개체 (ex- SOAP에서의 UDDI)* 없이 리소스 제공자가 직접 리소스 요청자에게 제공한다

구성

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

REST API 디자인 가이드

  • URI는 정보의 자원을 표현해야 한다
    • 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여하고, 이 자원언 Server에 존재한다
  • 자원에 대한 행위는 HTTP Method (GET, POST, PUT, DELETE)로 표현한다

  • Client가 자원의 상태(정보)에 대해 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다

특징

1) Server-Client 구조

  • 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 된다
    • REST Server: API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다
    • Client: 사용자 인증, context (login, session) 등을 관리한다

2) Stateless (무상태)

  • HTTP protocol은 stateless protocol 이므로 REST 역시 무상태성을 갖는다
  • 즉, 어떠한 이전 요청과도 무관한 각각의 요청을 독립적인 트랜잭션으로 취급한다 (이전 요쳥이 다음 요청의 처리에 연관되어서는 안된다)
  • Server의 처리 방식에 일관성을 부여하고, 부담이 줄어들며, 서비스의 자유도가 높아진다

3) Cacheable

  • HTTP Protocol이 웹 표준이고 이를 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용 할 수 있다.
  • Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현이 가능하다

4) Uniform Interface

  • URI로 지정한 자원에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다

5) Layered System

  • REST Server는 다중 계층으로 구성될 수 있다
    • API Server는 순수 비즈니스 로직만 수행하고, 앞단에 보안/로드밸런싱/암호화/사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있다
    • 로드밸런싱/공유 캐시 등을 통해 확장성과 보안성을 향상시킬 수 있다
    • Proxy, gateway와 같은 네트워크 기반의 중간 매체를 사용할 수 있다

6) Self-descriptiveness (자체표현구조)

  • REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다

SOAP (Simle Object Access Protocol)

SOA (Service Oriented Architecture)
서비스 지향 아키텍처

Keyword 모든 데이터가 XML로 표현된다

UDDI (Universial Description Discovery and Integration)

웹 서비스를 등록하고 검색하기 위한 저장소로, 웹 서비스를 공개적으로 접근, 검색이 가능하도록 공개된 레지스트리

SOAP은 XML을 근간으로 헤더(optional)와 바디를 조합하는 디자인 패턴으로 설계되어 있다. 헤더는

데이터와 데이터를 다루는 오퍼레이션들이 WSDL (Web Service Description Language) 로 정의되면, UDDI라는 전역적인 서비스 저장소에 등록되어 누구라도 서비스를 찾을 수 있도록 공개

WSDL (Web Service Description Language)

웹 서비스 기술언어 또는 기술된 정의 파일의 총칭으로 XML로 기술된다

서비스 제공 장소, 서비스 메시지 포맷, 프로토콜 등이 기술된다

특징

  • 플랫폼/프로그래밍 언어에 독립적이다

@W3C

SOAP provides a way to communicate between applications running on different operating systems, with different technologies and programming language...
  • 메시지 인코딩/디코딩 과정과 불필요한 정보 등으로 인해 처리 속도가 늦어질 수 있다

예제

<?xml version="1.0"?>

<soap:Envelope
  xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
  soap:encodingStyle="http://www.w3.org/2003/05/soap-encoiding">

  <soap:Body>
    <m:getPrice xmlns:m="https://www.w3schools.com/prices">
      <m:Item>Apples</m:Item>
    </m:getPrice>
  </soap:Body>
</soap:Envelope>

Ref