2015-01-08 3 views
0

나는 REST에서 "콜렉션"과 "스토어"의 차이점에 대해 고민하고있다.REST의 컬렉션과 상점의 차이점은 무엇입니까?

"a server-managed directory of resources" 

와 저장소는 다음과 같습니다 : 지금까지 읽은 바로는,

모음입니다 How "store" REST archetype isn't creating a new resource and a new URI?

그러나 didn를 :이 게시물을 발견

"client-managed resource repository" 

차이를 명확히하는 데 정말로 도움이되지 않습니다. 내 말은, 나는 하나가 서버에 의해 제어되고 다른 하나는 클라이언트에 의해 제어된다는 것을 이해하지만 ... 누군가가 실제 응용 프로그램에서 상점이 무엇인지에 대한 구체적인 예를 제공 할 수 있습니까?

GET http://myrestapplication.com/widgets/{widget_id} -- retrieves a widget from db 
POST http://myrestapplication.com/widgets/{widget_id} -- creates a new widget from db 
PUT http://myrestapplication.com/widgets/{widget_id},[list of updated parms & their vals] -- update widget 
PUT http://myrestapplication.com/users/johndoe/mywishlist/{widget_id} -- updates john doe's profile to add a widget that already exists in the database... but links to it as his favorite one or one that he wants to buy 

이 맞 :

나는 이런 식으로 뭔가 생각 *? 그렇다면 마지막 PUT을 어떻게 든 POST로 표현할 수 있습니까?

https://books.google.ca/books?id=4lZcsRwXo6MC&pg=PA16&lpg=PA16&dq=A+store+is+a+client-managed+resource+repository.+A+store+resource+lets+an+API+client:+put+resources+in,+get+them+back+out,+and+decide+when+to+delete+them&source=bl&ots=F4CkbFkweL&sig=H6eKZMPR_jQdeBZkBL1h6hVkK_E&hl=en&sa=X&ei=BB-vVJX6HYWvyQTByYHIAg&ved=0CB0Q6AEwAA#v=onepage&q=A%20store%20is%20a%20client-managed%20resource%20repository.%20A%20store%20resource%20lets%20an%20API%20client%3A%20put%20resources%20in%2C%20get%20them%20back%20out%2C%20and%20decide%20when%20to%20delete%20them&f=false

+1

이들 용어 중 어느 것도 REST와 관련이 없습니다. 견적에 대한 참고 자료를 제공 할 수 있습니까? 참조한 게시물은 REST의 특정 책 (잘못된) 해석에 대해 논의하고 있습니다. –

+0

@EngineerDollery 흥미로운 의견. O'Reilly의 REST API Design Rulebook (15 페이지)을 인용하고 있습니다. 본인의 게시물을이 책에 대한 링크로 업데이트했습니다. "편집 1"을 참조하십시오 – dot

답변

0

REST가 HTTP 동사를 사용하여 편집 한

나는이 둘 사이의 구분하지 내가 읽고 있어요 책 ...에 대한 온라인 링크를 발견 자원을 조작하십시오. 풀 스톱. 그게 전부 야. 몇 가지 클래스의 브라우저 기반 응용 프로그램 개발자를 빌드하려면 로컬 저장소 (store)를 사용하지만 REST와는 아무런 관련이 없습니다 (실제로는 반대입니다). 컬렉션은 REST 기반 API 디자인에서 특별히 고려해야 할 사항입니다. REST 원칙은 쿼리 결과에 표현되는 방식에 상당한 제약을두기 때문에 특별히 고려해야 할 사항입니다. 자원 유형으로 html 이외의 다른 것을 사용합니다.


편집 : REST는 우리가 자원을 요청할 때 우리가 자원 및 해당 자원을받을 것을 해당 자원에 의해 참조되는 일이없는 데이터로, 링크로 반환됩니다 지시. 이것은 HTTP 표준을 모방하여 요청 된 페이지를 반환하고 링크 된 페이지를 포함하지 않고 다른 페이지로 연결합니다. 따라서 우리의 자원은 자원 자체가 아닌 관련 자원에 대한 링크를 반환해야합니다.

그래서 컬렉션은 어떻습니까?

예를 들어 거대한 학생 목록이 들어있는 Course 개체가있는 대학 관리 시스템을 예로 들어 보겠습니다.

코스 리소스를 얻었을 때 나는 엄청날 수 있고 내 사용자가 관심을 갖지 않기 때문에 학생들의 컬렉션을 포함 목록으로 반환하고 싶지 않습니다. 그 대신 Course에 학생 컬렉션이 있다는 것을 알고 싶습니다. 필요할 때 해당 컬렉션을 개별적으로 쿼리 할 수 ​​있기를 원하며 필요할 때 페이지에 게시 할 수 있기를 원합니다. 이 작업을 수행하려면 해당 코드가 적절한 링크를 사용하여 컬렉션 URL에 링크해야합니다. 그러면 해당 링크를 처리하는 방법을 내 코드 (자바 스크립트)에서 알 수 있습니다. 그런 다음 주어진 컬렉션의 URL을 사용하여 페이지 된 리소스 목록을 요청하고 싶습니다.

(이 헤더를 사용하는 것은 논쟁의 여지가 대안이 어쩌면 있지만 &page=1&count=10 같은) 나는 결과를 제한하는 검색 문자열에 페이징 정보를 추가 할 수 있습니다 협약에 students?course=1,이 예에서는 컬렉션의 url 같은 일을 할 수있다 학생의 컬렉션을 강좌 개체에 포함 시키려면 URL 대신 참조 된 리소스를 반환하여 REST를 위반하는 것이 좋습니다. 단순히 전체 목록에 대한 링크를 제공한다면 REST를 위반하지는 않을 것이지만 대규모 계약을 기대하지 않는 원격 클라이언트에게 반환하지 말 것을 권장하는 사회적 계약을 위반하게됩니다.

그래서 컬렉션을 원한다면 컬렉션의 URL에 연결하고 컬렉션을 포함시켜야합니다. 다른 방법은 링크 모음을 포함시키는 것이지만 목록이 거대 할 때 사회적 계약에 위배됩니다 (나머지 계약은 아님).

+1

_ 컬렉션은 REST 기반 API 디자인에서 특별한 고려 사항입니다. REST 원칙은 쿼리 결과에 표현되는 방식에 상당한 제약을 부과하기 때문입니다. - 자세히 설명해 주시겠습니까? – toniedzwiedz

+0

내 답변 편집 –