REST Architecture Overview 2009-07-10Oracle Principal ConsultantByungwook Cho (byungwook.cho@oracle.com)
ICE BreakRESTMaldives!!
ICE BreakWebServiceService CompaniesOpen APIRoy FieldingREST
AgendaREST의 기원Basic of RESTBasic REST exampleAdvanced REST exampleAdvanced RESTREST ImplementationReference Architecture of RESTREST Stub generator구현시 고려 사항
1. REST의 기원웹(HTTP)의 공동 창시자 Roy Fielding의 2000년 박사 논문에 소개 됨.기존의 웹이 HTTP의 장점을 100% 활용하지 못하고 있음네트워크 아키텍쳐 (Not a protocol)De facto Standard오픈 진영(Google ,Amazon) 에 의해서 주도됨
2. Basic of RESTREST의 구성
2. Basic of RESTExamples자바스터디 시스템에 이름이 “bcho”이 사용자를 생성
자바스터디 시스템에서 이름이 “bcho”이 사용자 정보를 조회
자바스터디 시스템에서 이름이 “bcho”인 사용자 정보를 변경
자바스터디 시스템에서 이름이 “bcho”인 사용자 정보를 삭제URI : http://www.javastudy.co.kr/users/bchoMethod : POST <user>  <name>조대협</name>  <email>bcho@bea.com</email> </user>ResourceActionMessageURI : http://www.javastudy.co.kr/users/bchoMethod : GET  URI : http://www.javastudy.co.kr/users/bchoMethod : PUT <user>  <name>조대협</name>  <email>bcho@bea.com</email> </user>URI : http://www.javastudy.co.kr/users/bchoMethod : DELETE  
2. Basic of RESTResourceResource는 자원을 정의하며 각각 Unique한 URI를 갖는다.
Select(GET)에 한하여 Query String을 이용하여 URI를 정의할 수 있다.
Resource의 URI는 Human Readable한 포맷을 사용한다.
Unique한 URI 사용으로 인해서 GET에 대해서 웹캐쉬 사용가능  비약적인 성능 향상http://example.org/products/1234http://example.org/user/scotthttp://example.org/account/XA123-345http://example.org/products?category=food권장 			http://example.org/orders/2007/11권장하지 않는 사용법 	http://example.org/ITGKA/XATTY
2. Basic of RESTActionHTTP Method를 이용하여 Resource에 대한 행위 (CRUD)를 나타냄
오래된 네트워크 장비나 서버의 경우 GET/POST만 허용
HTTP 헤더 사용 x-http-method
POST,GET,PUT,DELETE 만으로 표현하기 어려운 행위가 있음
행위를 재 정의 : 이메일을 보낸다  이메일을 생성한다.
제어의 의미나 기타 행위에 대해서는 내부적인 표준 마련  PUT : CONTROL2. Basic of RESTMessageGET으로 오는 리소스의 데이타를 표현UPDATE나 CREATE시에 전송되는 리소스의 데이타를 표현포맷XML 또는 JSON을 주로 사용 (표준은 없음)하나의 리소스에 대해서 여러가지 포맷을 동시 사용이 가능HTTP Content-Type 헤더로 정의 가능구조데이타의 컬럼 구조 (Scheme)를 정의REST에서는 구조를 정의하는 명시적인 방법이 없음 (CF. WebService/WSDL)
3. Basic REST exampleREST를 이용하여 계좌이체를 수행하는 애플케이션 시나리오STEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.
STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다.
STEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.
STEP 4. 이체된 결과를 확인한다.3. Basic REST exampleSTEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  로그인 했다고 가정STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다사용자 ID두개의 계좌 정보가 리턴됨
3. Basic REST exampleSTEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.계좌 이체 Transaction 이 생성됨계좌 이체 Transaction Id
3. Basic REST exampleSTEP 4. 하루가 지난후 계좌이체 결과를 조회계좌 이체 진행중
4. Advanced REST example이것이 과연 REST?가장 기초중의 기초, 그럼 진짜 REST는?앞의 예제에서 누락된 HTTP의 특성LINK의 누락Link는 리소스간의 관계를 정의할 수 있다.Link를 통해서 리소스간의 BPM과 같은 Work-flow를 정의할 수 있다.Content-Type의 누락Input/Output Message Type을 정의할 수 있다.
4. Advanced REST exampleSTEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  로그인 했다고 가정STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다Content-Type으로 메세지의 형태를 정의다음 상태로의 LINK를 제공하여 상태 흐름을 정의Self descriptive message 구현
4. Advanced REST exampleSTEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.
4. Advanced REST exampleSTEP 4. 하루가 지난후 계좌이체 결과를 조회계좌 이체 진행중
5. Advanced RESTAdvanced REST 기능Link를 이용한 Resource간의 관계 정의
Content-Type을 이용한 Resource의 메시지 형태 정의
Conditional GET을 이용한 성능 향상
ETAG/Last Modified를 이용한 동시 Update 방지
Stateless 5. Advanced RESTLinkResource간의 관계를 정의LINK를 따라가면서 API의 사용법을 알 수 있음 (Self-Descriptive)Releation,URI,Content-Type으로 구성됨Relation : Resource간의 관계를 정의 (사람이 이해하기 쉬운 형태라야함)URI : 연관된 Resource에 대한 URIContent-Type: 해당 Resource에 대한 데이터 포맷과 구조표준안은 없고 논문에 따라 상당히 많은 표현 방법을 권장함예제 1)<link rel=“Relation” href=“http://URI” type=“Resource의 포맷과 구조” /><link rel=“order” hfer=“http://example.org/order” type=“application/example.org.order+xml” />정형화된 형태로 실제 구현에 유리함
가독성이 떨어짐

REST Ovewview

  • 1.
    REST Architecture Overview2009-07-10Oracle Principal ConsultantByungwook Cho (byungwook.cho@oracle.com)
  • 2.
  • 3.
  • 4.
    AgendaREST의 기원Basic ofRESTBasic REST exampleAdvanced REST exampleAdvanced RESTREST ImplementationReference Architecture of RESTREST Stub generator구현시 고려 사항
  • 5.
    1. REST의 기원웹(HTTP)의공동 창시자 Roy Fielding의 2000년 박사 논문에 소개 됨.기존의 웹이 HTTP의 장점을 100% 활용하지 못하고 있음네트워크 아키텍쳐 (Not a protocol)De facto Standard오픈 진영(Google ,Amazon) 에 의해서 주도됨
  • 6.
    2. Basic ofRESTREST의 구성
  • 7.
    2. Basic ofRESTExamples자바스터디 시스템에 이름이 “bcho”이 사용자를 생성
  • 8.
    자바스터디 시스템에서 이름이“bcho”이 사용자 정보를 조회
  • 9.
    자바스터디 시스템에서 이름이“bcho”인 사용자 정보를 변경
  • 10.
    자바스터디 시스템에서 이름이“bcho”인 사용자 정보를 삭제URI : http://www.javastudy.co.kr/users/bchoMethod : POST <user>  <name>조대협</name>  <email>bcho@bea.com</email> </user>ResourceActionMessageURI : http://www.javastudy.co.kr/users/bchoMethod : GET  URI : http://www.javastudy.co.kr/users/bchoMethod : PUT <user>  <name>조대협</name>  <email>bcho@bea.com</email> </user>URI : http://www.javastudy.co.kr/users/bchoMethod : DELETE  
  • 11.
    2. Basic ofRESTResourceResource는 자원을 정의하며 각각 Unique한 URI를 갖는다.
  • 12.
    Select(GET)에 한하여 QueryString을 이용하여 URI를 정의할 수 있다.
  • 13.
    Resource의 URI는 HumanReadable한 포맷을 사용한다.
  • 14.
    Unique한 URI 사용으로인해서 GET에 대해서 웹캐쉬 사용가능  비약적인 성능 향상http://example.org/products/1234http://example.org/user/scotthttp://example.org/account/XA123-345http://example.org/products?category=food권장 http://example.org/orders/2007/11권장하지 않는 사용법 http://example.org/ITGKA/XATTY
  • 15.
    2. Basic ofRESTActionHTTP Method를 이용하여 Resource에 대한 행위 (CRUD)를 나타냄
  • 16.
    오래된 네트워크 장비나서버의 경우 GET/POST만 허용
  • 17.
    HTTP 헤더 사용x-http-method
  • 18.
  • 19.
    행위를 재 정의: 이메일을 보낸다  이메일을 생성한다.
  • 20.
    제어의 의미나 기타행위에 대해서는 내부적인 표준 마련  PUT : CONTROL2. Basic of RESTMessageGET으로 오는 리소스의 데이타를 표현UPDATE나 CREATE시에 전송되는 리소스의 데이타를 표현포맷XML 또는 JSON을 주로 사용 (표준은 없음)하나의 리소스에 대해서 여러가지 포맷을 동시 사용이 가능HTTP Content-Type 헤더로 정의 가능구조데이타의 컬럼 구조 (Scheme)를 정의REST에서는 구조를 정의하는 명시적인 방법이 없음 (CF. WebService/WSDL)
  • 21.
    3. Basic RESTexampleREST를 이용하여 계좌이체를 수행하는 애플케이션 시나리오STEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.
  • 22.
    STEP 2. 사용자ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다.
  • 23.
    STEP 3. AZA12093계좌에서ADK31242계좌로 $100를 계좌 이체한다.
  • 24.
    STEP 4. 이체된결과를 확인한다.3. Basic REST exampleSTEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  로그인 했다고 가정STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다사용자 ID두개의 계좌 정보가 리턴됨
  • 25.
    3. Basic RESTexampleSTEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.계좌 이체 Transaction 이 생성됨계좌 이체 Transaction Id
  • 26.
    3. Basic RESTexampleSTEP 4. 하루가 지난후 계좌이체 결과를 조회계좌 이체 진행중
  • 27.
    4. Advanced RESTexample이것이 과연 REST?가장 기초중의 기초, 그럼 진짜 REST는?앞의 예제에서 누락된 HTTP의 특성LINK의 누락Link는 리소스간의 관계를 정의할 수 있다.Link를 통해서 리소스간의 BPM과 같은 Work-flow를 정의할 수 있다.Content-Type의 누락Input/Output Message Type을 정의할 수 있다.
  • 28.
    4. Advanced RESTexampleSTEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  로그인 했다고 가정STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다Content-Type으로 메세지의 형태를 정의다음 상태로의 LINK를 제공하여 상태 흐름을 정의Self descriptive message 구현
  • 29.
    4. Advanced RESTexampleSTEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.
  • 30.
    4. Advanced RESTexampleSTEP 4. 하루가 지난후 계좌이체 결과를 조회계좌 이체 진행중
  • 31.
    5. Advanced RESTAdvancedREST 기능Link를 이용한 Resource간의 관계 정의
  • 32.
  • 33.
  • 34.
  • 35.
    Stateless 5. AdvancedRESTLinkResource간의 관계를 정의LINK를 따라가면서 API의 사용법을 알 수 있음 (Self-Descriptive)Releation,URI,Content-Type으로 구성됨Relation : Resource간의 관계를 정의 (사람이 이해하기 쉬운 형태라야함)URI : 연관된 Resource에 대한 URIContent-Type: 해당 Resource에 대한 데이터 포맷과 구조표준안은 없고 논문에 따라 상당히 많은 표현 방법을 권장함예제 1)<link rel=“Relation” href=“http://URI” type=“Resource의 포맷과 구조” /><link rel=“order” hfer=“http://example.org/order” type=“application/example.org.order+xml” />정형화된 형태로 실제 구현에 유리함
  • 36.