2017-02-20 1 views
0

현재 REST 원칙을 준수하면서 내재 된 데이터의 무결성을 보장하기 위해 엔드 포인트를 설계하는 데 어려움을 겪고 있습니다.리소스를 RESTful 방식으로 변환

나는 두 개의 리소스 인 ShadowUserRealUser을 가지고 있지만 첫 번째 리소스는 성, 성 및 전자 메일 만 가지고 있습니다. 두 번째 사용자는 실제 사용자를 시스템의 다른 위치에서 처리 할 수있는 Id와 같은 훨씬 더 많은 속성을 가지고 있습니다.

내 경우에는 ShadowUser을 실제 사용자로 변환합니다. 내 머리에서

이 흐름은 매우 간단 보인다

  • 그림자 사용자를 얻을/GET API/ShadowUsers somePropery = someValue와
  • 데이터 페치/POST API를/RealUsers 새로운 실제 사용자를 만들
  • ?
  • API/ShadowUSers 삭제/그림자 사용자를 삭제 하시겠습니까? somePropery = someValue와

그러나 새로운 사용자의 생성과 그림자 사람의 삭제 사이에 문제가있을 때 발생 ? 이제 데이터가 일치하지 않습니다. 예제는 단일 사용자가 한 명이라도 더 쉽지만 두 번째 단계와 세 번째 단계 사이에 무언가가있을 수 있으므로 문제가 그대로 유지되어 사용자를 그림자와 실제로 유지합니다.

그렇다면 무엇이 좋고 지속 적이거나 잘못된 것이 있고 기본 데이터 저장소에서 변경된 것이없는 "트랜잭션"방식으로 어떻게 수행 할 수 있습니까?

사용할 수있는 "모범 사례"또는 "디자인 패턴"이 있습니까?

답변

-1

RESTful API의 역할 아마 실제 사용자를 배치하고 게시하여 배치 할 수 있습니다 (몇 주 전에 관련 문제에 대해 질문했습니다 : Updating RESTful resources against aggregate roots only).

API 측에서는 게시 된 사용자가 직접 처리되지 않지만 신뢰할 수있는 메시징 대기열에 대기열에 포함됩니다 (예 : RabbitMQ). 백그라운드 프로세스는 전체 대기열에 가입되며 실제 및 섀도우 사용자의 생성 및 제거를 각각 처리합니다.

신뢰할 수있는 메시징 시스템 사용의 요점은 재시도 정책을 구현할 수 있다는 것입니다. 작업이 완료되는 도중에 작업이 중단되면 다시 시도하고 작업을 완료하기 위해 아직 보류중인 변경 사항을 감지 할 수 있습니다.

요약하면이 방법을 사용하면 트랜잭션 방식으로 해당 작업을 구현할 수 있습니다.

관련 문제