2016-07-05 1 views
0

나는 이것을 가능한 한 간단하게하려고 노력할 것이다. 그것은 일종의 멍청한 질문 일 수있다.REST : 같은 요청으로 행을 업데이트하고 0 개 이상의 다른 리소스를 만드는 방법은 무엇입니까?

7 세 웹 응용 프로그램 (헬프 데스크 소프트웨어)을 다시 작성하고 있습니다. 다른 클라이언트 웹 브라우저 및 모바일 앱에서 사용하려면 REST API로 만들어야합니다. 또한 현재 잘 작동하고있는 원본에 비즈니스 논리를 최대한 가깝게 유지해야합니다.

REST에 대한 현재의 투쟁 다음이 자원의 status_id이 변화의 기록이 저장 될 필요가 변경되면

내가 필요로하는 업데이트하는 것입니다은 자원이, /tickets/47321

말할 수 모두 all-or-nothing 일 필요가 있기 때문에 동일한 DB 트랜잭션에서. 이것은 원래의 응용 프로그램이 작동하는 방식이며 우리는이 동작을 유지하려고합니다.

그래서 질문은 :

수 있습니까 tickets/47321 (status_id이 다른 경우) 서버에 존재하는 자원을 업데이트하고 역사 변화의 새로운 기록을 만들 수있는 모든 자원 또는 부분 상태 표시 및 반환에 PUT 그들 모두 다시 JSON으로 클라이언트 :

{ 
    ticket: {}, // new ticket state 
    history: {} // the new created record of history change 
} 

이 방법은 클라이언트가 ticket를 업데이트하고 어떤 존재 리턴이있는 경우 역사 변화의 목록에 역사를 추가 할 수 있습니까?

+0

예, 가능합니다. Java에서 가벼운 REST 프레임 워크에는 Restlet과 JAX-RS가 포함되어 있으며 Spring은 무거운쪽에 좋은 것이 있습니다. –

+0

REST API에서 이와 같은 현상이 발생합니까? 'PUT'에 부분적인 표현을 보내고 전체 리소스를 업데이트하는 것은 어떨까요? –

+0

왜 부분 표현을 보내시겠습니까? –

답변

0

기술적으로 예, 가능합니다. 그러나 단순히 2 개의 객체를 나란히 놓는 것만 큼 간단하지 않을 수 있습니다. Richardson Maturity Model (Level 1)에서 보면 api 끝점 (PUT)을 호출 한 후 동일한 유형의 리소스를 수신 할 것으로 예상됩니다. (당신이 REST 레벨 3으로 목표로하는 경우) 밝혔다되고 그건

, 당신이 하나가 추가 리소스를 포함 할 수있는, 더 나은 아직합니다 (Hypertext Application Language (HAL)을 따라 티켓에 기록 변경을 추가는 draft 사양을 제안), 또는 티켓에서 사양을 연결 웹에 정의 된 "대상 IRI"준수의 링크 관계 (RFC 5988) 제공 :

  • /api:history?ticketId=47321 모든 역사 기록은 그 티켓에 속하는 반환을, 페이징 및 생성 날짜별로 정렬, 예를 들어 (최신 항목 만 선택할 수 있음)
  • /api:history?id=123 서버에 몇 가지 작업을 할 것입니다 것은이에서 직선 부분 업데이 트에 대한 최신 역사 (그 티켓 ID 관련) 기록

, (패치 표준을 정의하는)에 RFC 6902보고를 가리키는 보장하기 위해 클라이언트의 관점이 API는

PATCH /ticket/47321 

[ 
    { "op": "replace", "path": "/author", "value": "David"}, 
    { "op": "replace", "path": "/statusId", "value": "1"} 
] 

더 많은 예제처럼 호출 할 수는 here를 찾을 수 있습니다.

+0

업데이트하는 것이 좋을뿐만 아니라, 각 작업을 처리하는 패치가 번거롭다. –

관련 문제