2013-02-14 2 views
9

저는 RESTful HATEOAS API를 작성하고 있습니다. 필자는 GET, POST 및 PUT해야하는 복합 엔티티가 있습니다. GET 부분은 쉽고 많은 예제가 있습니다. 응답은 엔티티의 기본 속성과 중첩 엔티티에 대한 링크를 포함합니다. 예를 들어 : 나는 계정을 만들거나 수정할 때RESTFul HATEOAS API의 HTTP POST 요청

{ 
"id":"2", 
"firstName":"Brad", 
"lastName":"Pitt", 
"balance":1234.5, 
"transactions":"http://localhost:8080/jersey-poc/api/v1.1/account/1/transactions", 
"self":"http://localhost:8080/api/v1.1/account/1", 
"accountType":"http://localhost:8080/api/v1.1/account/1/accountType" 
} 

문제가 발생합니다. 계정을 accountType과 연결해야합니다. 다음과 같은 POST 요청을 보낼 수 있습니다 : {"firstName":"Michael","lastName":"Jackson","balance":300.0,"accountTypeId":5}
그러나 그것은 HATEOAS 패러다임을 깨뜨릴 것입니다. POST/PUT 복합 엔티티에 가장 적합한 방법은 무엇입니까?

답변

4

페이로드가 HATEOAS와 관련하여 특별한 것은 없습니다. 유일하게 실질적인 문제는 accountTypeId을 발견 할 수 없다는 것입니다. (매직 ID는 항상 짧은 설명 문자열로 매핑하는 것이 더 좋으며, 열거 형이라고 생각하면됩니다.) HATEOAS 모델로 작업 할 때 기억해야 할 핵심 사항 중 하나는 사용자가 POST하는 엔티티가 자원을 생성하는 엔티티. 그것을 수정하고, 주석을 달고, 번역 할 수 있습니다. 그것은 여전히 ​​이고 개념적으로는 같지만, 이는 완전히 과 동일합니다.입니다. ID 및 생성 타임 스탬프를 추가하는 것이 확장이 완전히 합리적 일 수있는 훌륭한 예가 될 것입니다.

실제 문제는 내게는 POST를 수행 할 때 클라이언트가 제출해야하는 정보를 다시 생각해야한다는 것입니다. 당신은 클라이언트에게 그들이 POST를 할 때 그 정보를 제출해야한다고 말합니다. 나 자신, 나는 여기에 업로드를 위해 XML을 사용하는 것을 좋아한다. 왜냐하면 나는 그들의 POST 페이로드가 특정 스키마를 준수해야한다고 쉽게 말할 수 있기 때문이다. (XML 스키마와 RELAX NG 모두 제약 조건을 설명하기에 충분하다.) 그걸하는 유일한 방법은 아니라고 확신합니다.

+0

감사합니다. 그것은 그것을 설명합니다. 나는 요청과 응답이 동일해야한다고 확신했다. –