2013-01-15 5 views
6

MVC 패턴 및 REST 서비스에서 URI는 /items/{id}과 같이 사용하는 것이 일반적이지만, URI?REST URL 명명 규칙/items/{id} vs/items? id = {id}

GET /items/{id} 대 또한 GET /items?id={id}

는 기업이 어떤 관련 (예를 들어 부모) 개체를 가리키는 'referenceId'필드가 말할 수, 나는 부모 엔티티, 방법에 대한 모든 항목을 얻을 REST 서비스를 작성해야 더 나은된다

GET(POST) /items/parent/{parentId} 

또는

GET(POST) /items?parent={parentId} 

내 주관적인입니다 해소하는데 도움을 줄 수있을 것이다 통찰력에 대해 감사 할 것 REST 서비스를위한 URL을 만들지 않는다.

+0

질문에서 추출 : 복잡한 REST URL에 대한 좋은 조언은 여기에서 찾을 수 있습니다 (http : //blog.apigee.com/detail/simplify_associations_sweep_complexities_under_the_http) – thecoshman

답변

5

다음과 같은 체계를 사용합니다.

/items/id 

이는 id 인 항목의 리소스를 고유하게 주소 지정합니다. 우리는 매개 변수를 매개 변수로 사용하여이 리소스를 고유하게 주소 지정하지 않습니다 (다른 옵션과 마찬가지로). 마찬가지로 miguelcobain가 제안합니다. 여기 id

/parent/id/items 

고유 부모의 자원을 해결하기 ID입니다 우리는/수집 것과 참조하는 항목을 검색합니다. 질문에서 말한 것에서 부모는 컨테이너 나 컬렉션과 같이 여러 항목을 참조하는 것으로 보입니다.

제가 이것을 위해 사용하는 규칙은 왼쪽에서 오른쪽으로 범위를 좁히는 것입니다. 따라서 항목이 active 또는 inactive 일 수 있습니다. 따라서 항목은 active 또는 inactive이 될 속성 또는 속성을가집니다.첫 번째 질문에 대해

/items/active 
/parent/id/active 
+0

나는 아이템이 리소스라고 생각한다. 그것의 고유 한 ID를 가지며, 부모 pareamter없이 질의 될 수있다. 별도의 컬렉션 (테이블)에 저장됩니다. 그리고 부모는 실제로 너무 자원입니다. 그래서 부모님이 항목을 "필터링"해야합니다. 이 경우 더 적절하다고 생각되는 것은/items/parent/{parentId} 또는/parents/{parentId}/items입니까? – WHITECOLOR

+0

'/ parents/{parentId}/items'는 왼쪽에서 오른쪽으로 좁 힙니다. Parentscollection => single parent => parent에 대한 attributecollection – Xeago

2

물론 REST 원칙은 URL의 미적 세부 사항에 신경 쓰지 않습니다. 단지 모든 리소스가 고유하게 주소 지정 가능해야한다는 것입니다.

또한 쿼리 매개 변수를 사용하여 "종류"의 항목을 고유하게 주소 지정하는 것은 "매개 변수"의 의미를 위반하지 않습니까? 매개 변수는 선택적인 것이어야하며, 뭔가 추가적으로 매개 변수화되어야합니다. 예를 들어 항목 모음에 대한 세부 검색과 같은 것입니다.

작성한 내용이 경우에 따라 적절할 수 있습니다. 그것은 달려있다.

예에서 은 실제로 자원 인입니까? 그렇지 않다면 GET(POST) /parents/{parentId}을 할 수 있습니다.

parent이 부울 인 경우 부모가 같은 항목을 검색하려면 해당 매개 변수를 사용하는 것이 좋습니다. 그러나 당신이 명시 적으로 특정 ID를 가진 부모를 원한다고 말하고 있기 때문에, 나는 부모가 자원 그 자체라고 가정합니다. 귀하의 옵션 1을 사용하여 그 자원을 고유하게 주소 지정합니다.

나는 분명히했으면 좋겠습니다.

+0

나는 자료가 자원이라고 생각한다. 별도의 컬렉션 (테이블)에 저장됩니다. 그리고 부모는 실제로 너무 자원입니다. 좀 더 적절하다고 생각되는 것은/items/parent/{parentId} 또는/parents/{parentId}/items입니까? – WHITECOLOR

+0

확실히'/ parents/{parentId}/items'입니다. 이런 종류의 URL은 항상 발생합니다. – miguelcobain

+0

예, 고맙습니다. 주제를 마스터했습니다. – WHITECOLOR

3

:이 아래로 축소 나는 다음과 같은 계획을 얻을 존재하지 않는 경우

/items/{id} 지정된 ID 또는 404 단일 리소스를 검색합니다.

은 컬렉션을 쿼리하기 때문에 배열을 검색해야합니다 (배열에서 하나 인 경우에도). 두 번째 질문에 대한

:

나는 @ miguelcobain의 평가에 동의 - 항목이 특정 리소스/법인 인 경우, 그냥 검색하기 위해 적절한 자원 경로를 사용합니다.

소비자를보다 쉽게 ​​만들려면 rel="parent"으로 link header을 만들거나 하위 리소스에 uri를 포함 시키십시오. 링크 헤더의 예는 GitHub의 pagination api을 참조하십시오.

+0

item은 리소스이며 고유 ID를 가지고 있으며 부모 pareamter없이 질의 될 수 있다고 생각합니다. 별도의 컬렉션 (테이블)에 저장됩니다. 그리고 부모는 실제로 너무 자원입니다. 좀 더 적절하다고 생각되는 것은/items/parent/{parentId} 또는/parents/{parentId}/items입니까? – WHITECOLOR

+0

/parents/{parentId}/items – codeprogression

0

따라야 할 규칙이 없습니다.

items/{id} -이 규칙은 주어진 ID로 GET 항목에 적합합니다. 사용자가 ID를 제공하지 않으면 404 상태 코드를 반환합니다.

items/id={id}&name={name} -이 유형의 규칙은 주어진 기준별로 여러 항목을 검색하는 데 적합합니다. 항목이 없으면 이 아니고이 404 인 경우 "검색 기준과 일치하는 항목을 찾지 못했습니다"라고 말하면됩니다.