6장 컬렉션 패턴
- Collection+JSON은 여러 도메인에 걸쳐 반복해서 나타나는 패턴(컬렉션)을 다루기 위해 만들어졌다.
컬렉션은 무엇인가?
- 다른 리소스들의 링크를 걸어 나열하는 리소스다.
- 다른 리소스들을 한 그룹으로 묶는게 존재 목적이다.
아이템에 연결하는 컬렉션
- 아이템(item), 엔트리(entry), 멤버(member) : 컬렉션에 포함된 개별 리소르를 부르는 동의어
- 아이템이라해서 그 리소스 자체가 아니다.
- 친구 전화번호부의 콜렉션은 내가 아니다.
Collection+JSON
- href: 컬렉션 자체의 영속적인 링크
- items: 컬렉션 멤버를 가리키는 링크와 그것들의 부분 표현
- links: 컬렉션에 관계된 다른 리소스를 연결한다.
- queries: 컬렉션 검색을 위한 하이퍼미디어 컨트롤
- template: 컬렉션에 새 항목을 추가하기 위한 하이퍼미디어 컨트롤
아이템 표현하기
- 각 멤버는 JSON 객체로 표현된다.
- href 속성 : 해당 아이템을 독립 리소스로 나타내는 영속적인 링크
- links:: 그 아이템에 연관된 다린 리소스의 하이퍼미디어 링크
- data: 해당 아이템의 표현의 중요한 부분을 나타내는 기타 정보
아이템의 영속적인 링크
- href 속성의 URL에 GET 요청을 보내면 서버는 한 아이템에 대한 Collection+JSON 표현을 보낸다.
- 아이템의 데이터
- 아이템의 data 슬롯에 JSON 객체 배열로 들어간다.
- name과 value 프로퍼티가 각각 단일 키-값 묶음을 나타낸다.
- 선택사항인 prompt는 사람이 이해할 수 있는 설명이다.
- 아이템의 링크
- 특정 아이템 하나를 참조하고 싶을 때 클라이언트가 사용할 특별할 URL이다.
- links라는 목록이 포함될 경우, 여기에 관련된 리소스를 연결하는 하이퍼미디어 링크 여러 개가 포함된다.
- 쓰기 템플릿
- 새 아이템을 컬렉션에 추가하려면 쓰기 템플릿에 적혀있는 형식으로, 컬렉션의 href로 POST 요청을 보내면 된다.
- 쓰기 템플릿은 개념적으로 HTML 폼과 동일하다. 동일한 입력을 하면 똑같은 요청을 보낸다는 의미다.
- 폼으로 보내면 application/x-www-form-urlencoded, 쓰기 템플릿으로 보내면 application/vnd,collection+json 일 뿐이다.
- 검색 템플릿
- queries 슬롯에 저장된다.
(일반) 컬렉션은 어떻게 동작하는가?
- GET
- 표현을 제공한다.
- 표현의 미디어 유형은 그 리소스로 무엇을 할 수 있는지 말해준다.
- application/vnd,collection+json : Collection+JSON 표준의 규칙 적용
- application/atom+xml: AtomPub 규칙이 적용
- applcation/json: 맘대로 하겠다.
- POST로 추가하기(POST-to-Append)
- 새 리소스를 생성
- PUT과 PATCH
- 몇 개의 요소를 한 번에 수정하거나 개별 요소를 제거하는 데 사용
- DELETE
- 무언가를 삭제하기 위해 존재
- 페이지 나눔
- 링크가 많을 경우 나눠서 제공한다.
<link rel=”next” href=”/collection/4iz6”/>
: 다음- next, previous, first, last, prev 등이 제공될 수 있다.
- 검색 폼
AtomPub(Atom Publishing Protocol)
- Collection+JSON의 item은 어떤것이든 나타날 수 있다.
- 반면 AtomPub은 뉴스 기사를 게시할 목적으로 설계되었다.
- 또한 뉴스 기사에 필요한 필드들이 존재한다.
- XML을 처리하는 방식때문에 도태됨
- 사람들은 자신이 필요로 하는 표준이 아니라면 해당 표준을 배우려 하지 않는다.
의미 체계의 문제: 잘 대응하고 있는가?
- 우리는 ‘컴퓨터가 어떤 링크를 클릭하도록 결정하게 하려면 어떻게 프로그래밍을 해야 할까?’에 대해 생각 중
- 컬렉션 패턴은 두 가지 다른 종류의 리소스를 인식한다 ⇒
- 아이템 유형 리소스 : GET, PUT, DELETE에 응답
- 컬렉션 유형 리소스 : GET, POST에 응답
- 컬렉션과 아이템의 차이점 : 의미체계에서 나온다.
- 컬렉션 패턴에서 어떤 행동을 하기 위해 무엇이 필요한지는 알 수 있다.
- 하지만 필요한 필드의 의미를 알기 위해선 여전히 설명이 필요하다.