2009-11-23 5 views
4

REST 기반 API에서 작업 중이며 부모/자식 관계를 나타내는 표준 방법을 알아내는 데 어려움이 있습니다. (저는 CXF에서 콩을 작성하고 JAX-RS와 JAXB를 사용하고 있습니다 .CXF에서 제공하는 기본 예제부터 시작했습니다.)REST 및 JAX-RS를 통해 부모 - 자식 엔터티를 모델링하는 방법

내 문제는 Foo와 Bar가 있다고 가정 해 보겠습니다. Foo와 Bar는 1-N 관계가 있습니다. 즉, 1 Foo는 많은 막대를 가지고 있습니다. 내 질문은, 바 Foo가 무엇을 가지고 있는지 알아내는 표준 방법은 무엇입니까? Foo가 소유 한 Bar 리소스에 액세스하는 표준 방법은 무엇입니까? http://xxx/fooservice/foos

을 얻을에 하나의 foo는에서 작동

:

나는 예를 들어 내가에서, FOOS를 나열 할 수 있음을 알아 낸

PUT/UPDATE/DELETE http://xxx/fooservice/foo/ {fooid}

그러나 Foo 121에있는 바를 어떻게 나열합니까? 그리고 어떻게 접근 할 수 있습니까? 난 그냥 빈에 대한 출력하지 컬렉션을 속성 않는 기본 JAXB 마샬를 보이는 것으로 나타났습니다, 그래서 푸 인 경우 :

 
Foo 
    - String id 
    - String name 
    - Collection bars 

JAXB는 같은 출력 :

< foo는 > < ID를/ID > < 이름 > foo는 이름 </이름 > </foo는 > < - 바의 부재 속성주의

클라이언트가 Foo의 바가 있다는 것을 합리적으로 예상 할 수있는 방법이 없기 때문에 문제가 있습니다. 내가 사용 바의 목록을 가져 상상할 수 그래서 동안 :

는 GET http://xxx/fooservice/foo/121/bars

어떻게 엔티티의 출력이 그것에 대해 아무 말도하지 않는 경우 푸 바있다 것을 알고 클라이언트? 이제 목록을 가져 않는 클라이언트를 가정하면, 개체 작업이 같은 것 같다 : UPDATE//

GET 삭제 http://xxx/fooservice/foo/121/bar/435

푸 (121)에 의해 소유 바 (435)를 액세스 할 것이다 당신이 원하는 무엇

답변

10

해야 할 일은 확실히 가능합니다. 자원을 설계하는 한 가지 방법은 다음과 같습니다

/foo 
      # A list of all the Foo resource names (not representations). 

/foo/{fooid} 
      # A detailed representation of a particular Foo, including 
      # a list of all that Foo's Bar resource names (not representations). 

/foo/{fooid}/bar/{barid} 
      # A detailed representation of a particular Bar. 

당신은 바 (구매 주문의 마스터와 포함 된 세부 행에서와 같이) 특정 푸 이외의 실제 존재가없는 상황이있을 수 있습니다. 이 경우, 각 푸 그것으로가는 모든 많은 바 데이터를 가지고 있지 않은 경우, 당신은 바로 푸 표현에 전체 바의 세부 사항을 반환 할 수 :

/foo 
      # A list of all the Foo resource names (not representations). 

/foo/{fooid} 
      # A detailed representation of a particular Foo, including 
      # full details on each of its Bars. 

당신은 일반적으로 REST와 세분성을 원한다 자원. 이것을 선택하면 Foo의 Bars를 수정하려면 Foo를 가져오고, Foo 표현의 Bars를 수정 한 다음 Foo를 PUT합니다.

직렬화 된 XML 표현에서 어떤 일이 일어나는지 확실하지 않으면 관련 코드를 사용하여 두 번째 질문을 작성해야합니다.

0

자세한 게시물 주셔서 감사합니다 - 당신이 설명하는 것은 기본적으로 이미 각 Foo 내부의 바를 자세하게 표현하지 않고서는 내가 제안한 바에 따라 대부분 옳았습니다.

Foo 내부의 모음 모음이 JAXB에서 XML로 언 마샬링되지 않는 이유를 별도의 Q에서 알 수 있습니다.

0

Taylor, Jersey의 JAX-RS 구현은 확실히 XML 또는 JSON으로 변환되는 객체의 List 속성을 방출합니다.

List<User> users = new ArrayList<User>(); 

나는 XML 또는 UserStore의 JSON 버전을 방출 저지를 사용할 때, 사용자의 배열을 얻을 : 그래서 그냥 완료 응용 프로그램에서의 UserStore 개체 속성, 사용자를 가지고, 그 목록이다 해당 속성 :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<users> 
    <user> 
     <firstName>John</firstName> 
     <id>a29a377f-4329-4ec8-9459-b5b1c2efc38a</id> 
     <lastName>Doe</lastName> 
    </user> 
    <user> 
     <firstName>Jane</firstName> 
     <id>bb4dad28-1263-440a-afc5-062a8566ef90</id> 
     <lastName>Roe</lastName> 
    </user> 
</users> 

{ 
    "user": [{ 
     "firstName": "John", 
     "id": "a29a377f-4329-4ec8-9459-b5b1c2efc38a", 
     "lastName": "Doe", 
    }, 
    { 
     "firstName": "Jane", 
     "id": "bb4dad28-1263-440a-afc5-062a8566ef90", 
     "lastName": "Roe", 
    }] 
} 

아마 당신은 단지 컬렉션보다는 목록 ...있는 귀하의 재산과 관련이로 실행중인 문제

0

이 질문에 대한 답변은 데이터 모델링에 의해 주도 될 것이며, 데이터 모델링을 위해 질문은 "합성 키를 사용하여 URI에 부모 ID를 넣어야하는 경우 자식 모델에 복합 키 사용 여부"라는 질문이 있습니다 그렇지 않다면 자식은 복합 ID가 아니기 때문에 자식 ID가있는 URL 만 사용할 수 있습니다.

데이터 모델링 질문입니다!

관련 문제