REST

1,872 views
1,653 views

Published on

REST의 의미 알아보기

Published in: Engineering
0 Comments
25 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,872
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
55
Comments
0
Likes
25
Embeds 0
No embeds

No notes for slide

REST

  1. 1. REST 그 쓸쓸함에 대하여… 강우 kangwoo@gmail.com
  2. 2. REST가 뭘까?
  3. 3. REpresentational State Transfer
  4. 4. REpresentational
  5. 5. 표현 하려면 뭐가 필요할까?
  6. 6. Resource Physical / Virtual Resources
  7. 7. Identifier
  8. 8. Uniform Resource Identifier
  9. 9. URITemplate • http://스프링캠프/발표자/{발표자아이디} • http://스프링캠프/발표자/kangwoo
  10. 10. Representation ! ! Client 자원에 대해서 알려줘!!! ! ! Server Resources Request Response 그 자원은 어쩌고 저쩌고 이다.
  11. 11. Representation 아이디:kangwoo 이름:김강우 취미:잠자기 <발표자> <아이디>kangwoo</아이디> <이름>김강우</이름> <취미>잠자기</취미> </발표자> http://스프링캠프/발표자/kangwoo TEXT Representation XML Representation Client ! Server 발표자 Resource
  12. 12. 어? 저런건 예전에도 많이 했는데…
  13. 13. 응답 HTTP/1.1 200 OK Content-Length: 100 Content-Type: application/ xml;charset=utf-8 ! <발표자> <아이디>kangwoo</아이디> </발표자> Plain Old XML over HTTP HTTP Client HTTP Server Object Dispatcher Dispatcher Object Server ApplicationClient Application
  14. 14. State Transfer
  15. 15. 상태가 뭐지? 상태를 왜 전송하지?
  16. 16. State
  17. 17. 발표자의 상태가 안좋습니다.
  18. 18. 비 오는 날엔 누군가와 커피를 마시고 싶다
  19. 19. State Transitions State State Transition 상태 안좋음 상태 좋음(?)
  20. 20. State Transitions 커피 주문 결제 완료 주문 취소됨 커피 만들기 주문 처리 완료 지불 취소 주문 변경
  21. 21. Resource Resource Oriented Architecture
  22. 22. 자원을 이용한 모델링 커피 주문 결제 완료 주문 취소됨 커피 만들기 주문 처리 완료 지불 취소 주문 변경
  23. 23. 자원을 이용한 모델링 주문 Resource 결제 Resource 명사 (noun)
  24. 24. 자원을 이용한 모델링 주문 주문 하다. 주문을 확인하다. 주문을 변경하다. 주문을 취소하다. 동사 (verb)
  25. 25. 명사? + 동사? 잘 모르겠지만, 일단 만들어보자.
  26. 26. Remote Procedure Call 주문 서비스 주문 하다() 주문을 확인하다() 주문을 변경하다() 주문을 취소하다() 주문 아이템 추가하다() POST /주문/주문하다 GET /주문/주문확인하다?아이디={주문아이디} POST /주문/주문변경하다 POST /주문/주문취소하다. POST /주문/{주문아이디}?action=주문취소
  27. 27. Resource + Identifier HttpMethod
  28. 28. REST 주문 Resource GET /주문 GET /주문/{주문아이디} POST /주문 PUT /주문/{주문아이디} DELETE /주문/{주문아이디} 주문 하다. 주문을 확인하다. 주문을 변경하다. 주문을 취소하다.
  29. 29. Uniform Interfaces • Create -> POST • POST /주문 • Read -> GET • GET /주문/{주문번호} • Update -> PUT • PUT /주문/{주문번호} • Delete -> DELETE • DELETE /주문/{주문번호}
  30. 30. GET 을 이용한 자원 보기 GET /주문/1234 200 OK <주문> … </주문> http://콩다방/주문/1234 고객 콩다방 500 Internal Server Error 404 Not Found ERRORGET
  31. 31. HTTP Status Code • 1xx (조건부 응답) • 2xx (성고) • 3xx (리다리렉션 완료) • 4xx (요청 오류) • 5xx (서버 오류) 출처 : http://ko.wikipedia.org/wiki/HTTP_상태_코드
  32. 32. POST 를 이용한 자원 생성 POST /주문 <주문> … </주문> 201 Created Location http://콩다방/주문/1234 http://콩다방/주문 http://콩다방/주문/1234 고객 콩다방 500 Internal Server Error 400 Bad Request ERRORCREATE
  33. 33. PUT 을 이용한 자원 수정 PUT /주문/1234 <주문> … </주문> 200 OK OR 204 No Content http://콩다방/주문/1234 고객 콩다방 500 Internal Server Error 409 Conflict ERRORUPDATE 404 Not Found
  34. 34. 409 Conflict 405 Method Not Allowed
  35. 35. DELETE 를 이용한 자원 삭제 DELETE /주문/1234 200 OK OR 204 No Content http://콩다방/주문/1234 고객 콩다방 500 Internal Server Error 405 Method Not Allowed ERRORDELETE 404 Not Found
  36. 36. 그래서 뭐?
  37. 37. State Transitions 커피 주문 결제 완료 주문 취소됨 커피 만들기 주문 처리 완료 지불 취소 주문 변경
  38. 38. 커피를 주문하기 POST /주문 HTTP/1.1 Host: 콩다방 Content-Type: application/xml Content-Length: 1818 ! <주문> <items> <item> <name>아메리카노</name> <size>제일큰거</size> </item> </items> </주문> HTTP/1.1 201 Created Content-Type: application/xml Content-Length: 1818 Date:몰라 Location: http//콩다방/주문/1234 ! <주문> <items> <item> <name>아메리카노</name> <size>제일큰거</size> </item> </items> <status>결제 대기중</status> </주문> 요청 응답
  39. 39. State Transitions 커피 주문 결제 완료 주문 취소됨 커피 만들기 주문 처리 완료 지불 취소 주문 변경
  40. 40. if (status == “결제 대기중”) { Button 결제버튼 = new Button(“결제”, “http://콩다방/결제/1234”); Button 변경버튼 = new Button(“변경”, “http://콩다방/변경/1234”, “POST”); Button 취소버튼 = new Button(“취소”, “http://콩다방/결제/1234”, “DELETE”); 화면.add(결제버튼); 화면.add(변경버튼); 화면.add(취소버튼); } 앱 개발자의 관점 결제 대기중 결제 주문 변경 주문 취소
  41. 41. Hypermedia <주문> <items> <item> <name>아메리카노</name> <size>제일큰거</size> </item> </items> <cost>오백원</cost> <status>결제 대기중</status> <links> <link href=“http://콩다방/결제/1234” rel=“payment”>결제</link> <link href=“http://콩다방/주문/1234” rel=“update”>주문 변경</link> <link href=“http://콩다방/주문/1234” rel=“cancel”>주문 취소</link> </links> </주문> 응답
  42. 42. 주문 상태 결제 대기중 결제 주문 변경 주문 취소 결제 완료 음료 준비중
  43. 43. 결제 대기중 HTTP/1.1 200 OK Content-Type: application/xml Content-Length: 1818 ! <주문> <items> <item> <name>아메리카노</name> <size>제일큰거</size> </item> </items> <status>결제 대기중</status> <links> <link href=“http://콩다방/결제/1234” rel=“payment”>결제</link> <link href=“http://콩다방/주문/1234” rel=“update”>주문 변경</link> <link href=“http://콩다방/주문/1234” rel=“cancel”>주문 취소</link> </links> </주문> 요청 응답 GET /주문/1234 HTTP/1.1 Host: 콩다방
  44. 44. 결제 완료 HTTP/1.1 200 OK Content-Type: application/xml Content-Length: 1818 ! <주문> <items> <item> <name>아메리카노</name> <size>제일큰거</size> </item> </items> <status>결제 완료</status> <links> <link href=“http://콩다방/주문/1234” rel=“update”>주문 변경</link> <link href=“http://콩다방/주문/1234” rel=“cancel”>주문 취소</link> </links> </주문> 요청 응답 GET /주문/1234 HTTP/1.1 Host: 콩다방
  45. 45. 음료 준비중 HTTP/1.1 200 OK Content-Type: application/xml Content-Length: 1818 ! <주문> <items> <item> <name>아메리카노</name> <size>제일큰거</size> </item> </items> <status>음료 준비중</status> </주문> 요청 응답 GET /주문/1234 HTTP/1.1 Host: 콩다방
  46. 46. HATEOAS Hypermedia As The Engine Of Application State
  47. 47. EntityTag GET /주문/1234 HTTP/1.1 Host: 콩다방 HTTP/1.1 200 OK Content-Type: application/vnd.cafe.order+xml Content-Length: 1818 ETag: “123456789abcdef” ! <주문> <items> <item> <name>아메리카노</name> <size>제일큰거</size> </item> </items> <status>결제 대기중</status> </주문> 요청 응답
  48. 48. EntityTag GET /주문/1234 HTTP/1.1 Host: 별다방 IF-None-Match: “123456789abcdef” HTTP/1.1 204 No Content 요청 ETag가 동일할때 HTTP/1.1 200 OK Content-Type: application/xml Content-Length: 1818 ETag: “123456789abcdef” ! <주문> <items> <item> <name>아메리카노</name> <size>제일큰거</size> </item> </items> ETag가 다를때
  49. 49. EntityTag PUT /주문/1234 HTTP/1.1 Host: 콩다방 IF-Match: “123456789abcdef” ! <주문> … </주문> HTTP/1.1 204 No Content ETag: “123456789abcdef” 요청 응답 (수정 성공) HTTP/1.1 412 Precondition Failed 응답 (수정 실패)
  50. 50. 와플이 먹고 싶어요
  51. 51. 주문 변경 POST /주문/1234 HTTP/1.1 Host: 콩다방 ! <주문> <items> <item> <name>아이스크림 와플</name> <size>제일큰거</size> </item> </items> </주문> 요청
  52. 52. REST
  53. 53. The Programmable Web Resource Oriented Service Oriented POX+HTTPREST SOAP XML-RPC
  54. 54. 감사합니다.

×