2013-03-11 4 views
8

나는이 문제에 대해 procced하는 방법을 결정할 수없는 문제점을 가지고 있습니다. 그리고 이것을 해결할 수있는 표준 방법이 있는지 또는 여러분에게이 문제에 대한 큰 의견이 있는지 알아야합니다.REST API, 관계가있는 POST 엔티티?

중요한 것은 학습 목적으로 매우 기본적인 API를 빌드하기 시작한 것입니다. API는 간단한 뮤직 스토어입니다. 상점에는 필요한 일부 앨범과 아티스트가 있습니다.

그래서 관계가 아티스트 < --- 1 ----- * ---> 앨범과 앨범이 존재하기 위해서는 앨범에 아티스트가 있어야합니다. 그러나 예술가는 앨범과 앨범을 요구하지 않습니다. 문제에 대한 지금

...이 때문에 관계

내가 앨범 데이터 .. 전체 ARIST-data..not 단지를 게시해야합니다 .. 새 앨범을 만들려면 제 아티스트의 ID ..하지만 전체 아티스트 .. 당신이 나에게 묻는다면 그다지 효과적이지 않습니다.

그래서이 문제를 해결하는 두 가지 방법이 있습니다 ... 나는 전체 앨범 데이터/개체를 게시하고 개체에 대한 아티스트 데이터에 ID를 포함 할 수 있습니다. 예술가.

그래서 대신 포스팅 :

{ 
"Name":"AlbumName", 
"Description":"Some description for the album", 
"ReleaseYear": "1992", 
"Artist" { 
    "Name":"Some artist", 
    "Id":"12345", 
    "Biography":"Lorem ipsum dolor sit amet" 
    } 
} 

내가 이런 짓을 했을까 :

{ 
    "Name":"AlbumName", 
    "Description":"Some description for the album", 
    "ReleaseYear": "1992", 
    "Artist" { 
     "Id":"12345" 
     } 
    } 

옵션 두 번째는 실제 경로/URL이 특정 먹으 렴하는 것입니다 ... 예를 들어 : /api/artist/{artistid}/album 그리고 앨범에 개체를 게시하면됩니다.

하지만 제가 말했던 것처럼 .. Im r eally 여기에 옳고 그른 것이 무엇인지 확실하지 않습니다 .. 또는 이것을 처리하는 표준 방법이 있습니까?

미리 감사드립니다.

답변

6

나는 이런 식으로 제안합니다.

POST /musicstore/artist/343/albums 

{ 
    "Name":"AlbumName", 
    "Description":"Some description for the album", 
    "ReleaseYear": "1992", 
} 

아티스트 (343)에 대한 앨범의 컬렉션의 자식으로 리소스를 만드는 작업은 내재적 아티스트 및 앨범의 관계를 생성한다. 페이로드에 지정할 필요가 없습니다.

+0

여기에 주제가 다를 수 있습니다.하지만 ASP.net 웹 API에서 어떻게 수행 할 것입니까? .. 각 경로에 대한 새 경로를 정의하면 코드 줄 수가 많아집니다. – Inx

+0

many-to-many 리소스에 대해? 경로에 두 개의 고유 한 ID가 포함되어야합니까? 아니면 두 가지 중 하나가 본문 페이로드에 있어야합니까? – Stephane

+0

@StephaneEybert 어느 쪽이든 작동합니다. 나는 후자를 선호한다. 환경에 따라 http://tools.ietf.org/id/draft-snell-link-method-01.html도 흥미로울 수 있습니다. –

0

나는 두 옵션 모두 정확하다고 생각하며 어떤 것을 사용해야 할 것인가. 두 번째 것은 HATEOAS과 같습니다.