2010-04-15 2 views
29

이 질문은 친숙 할 것 같지만 REST가 당황한 또 다른 프로그래머입니다.REST에서 상태를 관리하는 방법

저는 StateA에서 StateB로 이동하는 전통적인 웹 응용 프로그램을 가지고 있습니다. 사용자가 StateB의 (URL)로 이동하면 이전에 StateA를 방문했는지 확인하고 싶습니다. 일반적으로 세션 상태를 사용하여이 작업을 수행합니다.

세션 상태가 REST에서 허용되지 않으므로 어떻게해야합니까?

+0

클래스에서 @Stateful을 사용하십시오. – PSyLoCKe

답변

46

구체적으로 수행하려는 작업에 따라 2 개의 REST 답변이 있습니다.

사용자가 멀티 스크린 마법사 또는 기타 탐색 기반 워크 플로를 통해 작업하는 경우와 같이 요청 기반 상태를 진정으로 관리하려는 경우 REST 응답은 상태를 다시 보내야한다는 것입니다. 숨겨진 텍스트 필드, 쿼리 문자열 또는 양식에 저장된 POST 데이터와 같은 것을 사용하여 각 요청/응답과 함께 앞뒤로 이동합니다. 이것은 마틴 파울러 (Martin Fowler)의 "클라이언트 상태 (Client State)"디자인 패턴을 구현 한 것입니다. 자세한 내용은 그의 책 기업용 애플리케이션 아키텍처의 패턴을 참조하십시오 (here for a reference 참조).

한편 쇼핑 카트와 같은 서버의 새로운 개체를 관리하려는 경우 REST 응답은 실제로 액세스 할 수있는 새 엔터티를 만드는 것입니다 다른 어떤 것과 마찬가지로 직접 URL을 사용하십시오. 이 새로운 엔티티를 데이터베이스 또는 응용 프로그램 메모리 (예 : 기존 Session 객체)에 저장할지 여부는 사용자의 선택에 달려 있지만, 새 객체는 서버의 "상태"와 새로운 사용자가 상호 작용할 수있는 엔티티.

+5

한 지점 만 추가하면됩니다. "서버상의 새로운 객체"접근법을 취한다면 그것은 일등급 리소스로 취급되어야하며 식별 URL을 가져야합니다. –

+1

나 자신을 쉬게하려고 ... 나는 궁금하다. "일등급"이이 맥락에서 기술적 용어인가? – keithjgrant

+0

@keithjgrant "기술적 인 용어"라고 말할 수 있을지 모르겠다. 그리고 그것은 확실히 REST에만 국한된 것은 아니지만, 특정 기술의 핵심 "객체"를 기술 할 때 일반적으로 사용되는 방법이다. 프로그래밍 언어 등을 포함하고 있으며 "1 등급"객체가 기술에서 특별한 대우를 받았다는 것을 의미합니다. –

관련 문제