2016-09-03 5 views
0

엄격한 부모/자식 계층 관계가있는 두 개의 리소스가 있는데, 여기에는 자식이 부모없이 존재하지 않으며 자식 ID는 부모 리소스 내에서 단조롭게 증가하는 정수 여야합니다 전역 자원 세트 내에서 고유하지는 않습니다. 데이터베이스 내에서복합 리소스 ID 대 URL ID

Foo: ABC 
    |- Bar: 1 
    |- Bar: 2 
    |- Bar: 3 
Foo: QWE 
    |- Bar: 1 
    |- Bar: 2 

, 우리는 간단한 화합물 자연 키와 테이블이 저장 : 푸와 푸 부모 인 바, 그들에게 전화하자 것은

Foo | Bar | Value 
=================== 
ABC | 1 | shizzle 
ABC | 2 | bizzle 
ABC | 3 | fizzle 
QWE | 1 | lorem 
QWE | 2 | ipsum 

표준은 유형해야합니다/ID 조합은 포함 된 리소스가 올바르게 링크 될 수 있도록 API 내에서 고유해야합니다. 따라서 여기에서 고유 한 바 ID를 만들려면 Foo_Bar, 즉 ABC_1 및 QWE_1과 같은 복합 키에 가입해야합니다. 추악하고 주요 구성 및 결합 숯에 대한 지식을 필요로하는 클라이언트 주변의 일부 문제를 제기하지만 충분히 공정하고 클라이언트가 대신 사용할 자연 키를 데이터 또는 메타로 추가 할 수 있습니다.

제 질문은 하위 리소스에 대한 URL과 함께 제공됩니다.

https://example.com/api/v1/foos/ABC/bars/ABC_1

는하지만 추한 언급하지 않기는 'ABC'를 반복하지 않고 중복 것, 그리고 우리의 주요 웹 사이트 URL과 일치 : 같은 문서 ID와 내부 일관성을 위해 URL을 보일 수 있습니다. 나는 내가 원하는 것을 할 자유라고 생각

https://example.com/api/v1/foos/ABC/bars/1

,하지만 난 그들이이라는 가정을 할 경우이 밖에 라이브러리의 일부 문제가 발생할 수 있습니다 의심 : 나는 많이 사용 원합니다 똑같다? 일반적으로 URL은 내부 리소스 유형/ID와 논리적 관계가 있어야합니까?

관련하여 리소스 ID는 '.'을 사용할 수 있습니까? '_'대신 복합 키에 가입 하시겠습니까? 이렇게하면 관계 경로와 일치하게되므로 'foos.bars'= 'ABC.1'입니다. 표준에서는 '.' 회원 이름에서 ID 이름에 그러한 제약이없는 것 같습니다.

건배!

존.

답변

0

사양은 절대 URL 형식이 아닙니다. URL이 리소스의 ID와 일치하는 것이 좋습니다. 자원 ID에 의해 키잉 집합으로 자원 http://jsonapi.org/recommendations/#urls-individual-resources

대한다 소장
. 개별 자원의 URL은 자원 ID를] 렉션 URL에 추가하여 구성 할 수 있습니다. 예를 들어, "1"의 ID와 함께 사진은 URL이됩니다 것, 아이디 ABC_1와 푸 자원에 액세스 할 URL을이 다음

/사진/1

https://example.com/api/v1/foos/ABC_1

따라, 당신의 URL의 예 https://example.com/api/v1/foos/ABC/bars/ABC_1에 관한 ID 1
https://example.com/api/v1/bars/1

와 바 자원을 얻을 수 INVA하지 동안 lid의 경우, resource_type/resource_id/relation_name/relation_id (4 개의 중첩 된 레벨)와 유사한 스펙에서 유사한 예제를 찾을 수 없습니다.

사양 추천이 경우 리소스 식별자 객체의 배열을 돌려줍니다 3 단계,하는 것입니다 :
RESOURCE_TYPE/RESOURCE_ID/relation_name http://jsonapi.org/recommendations/#urls-relationships

에서

을 그것은하는 것이 좋습니다 관계 URL은/relationships /과 자원의 URL에 대한 관계 이름을 추가하여 형성해야합니다.

/사진/1/관계/의견

:

예를 들어, 사진의 코멘트 관계는 URL이있을 것이다