6장 컬렉션패턴

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에 응답 컬렉션과 아이템의 차이점 : 의미체계에서 나온다. 컬렉션 패턴에서 어떤 행동을 하기 위해 무엇이 필요한지는 알 수 있다. 하지만 필요한 필드의 의미를 알기 위해선 여전히 설명이 필요하다.

2024년 10월 23일 · 2 분 · 배준수