REST 용어에서 자원과 표현의 차이점은 무엇입니까?


9

REST에 대한 내 이해는 모델링 서비스 작업을 상태 표현으로 사용하고 HTTP를 사용하여 한 상태에서 다른 상태로 전환하는 것입니다. 나는 커뮤니티가 잘 존중하는 현명한 개발자 / 건축가 인 지미 보가드 (Jimmy Bogard) 의이 기사 를 읽었을 때까지 리소스를 서비스 측 상태의 표현으로 항상 이해했습니다 . 해당 게시물에서 특정 진술을 인용하려면

표현은 약간 다릅니다 . 자원 의 현재 상태를 설명합니다 (요청시).

이것은 나를 혼란스럽게했다. 주제에 대해 일반적으로 인정되는 의견은 무엇입니까?


1
다음을 확인하고 싶을 수 있습니다. 여기서 어떤 주제를 물어볼 수 있습니까? . Programmers.SE에 대한 여론 조사 주제는 없습니다.
Adam Zuckerman

2
글쎄, 그 페이지에 나열된 모든 것은 흑백으로 대답하지 않고 모든 의견을 가지고 있습니다. 또한이 질문이 의견에 관한 것인지 확실하지 않습니다. 내 질문에 "의견"이라는 단어를 사용했기 때문입니까?
수스

기본적으로 그렇습니다. 불행하게도 (또는 아마도 운 좋게도), "의견", "모범 사례"등과 같은 단어는 "뇌가 있어야하는 빈 공명 구멍"과 강하게 연관되어있다. 멀리 떨어져서 뛸 수 있습니다. 단어 정의를 찾는 사람들은 종종 최악의 범죄자입니다. 어떤 특정한 문제를 해결하려고합니까?
Robert Harvey

1
귀하의 질문에 관해서는, 자원은 단순히 "주소로 인터넷에 무언가"있는 반면, 표현은 "인터넷에있는 것이 다시 표현되는 방식"입니다. 파일, 웹 페이지 또는 JSON 문서 일 수 있습니다. Word 문서 나 스프레드 시트와 같은 특정 종류의 파일 일 수 있습니다. 이 모든 경우에, 표현은 검색하는 것입니다. "자원의 현재 상태"는 마지막으로 자원을 검색 한 후 상황이 변경되었을 수 있음을 나타냅니다.
Robert Harvey

답변:


14

짧은 답변

지도는 영토가 아닙니다.

더 긴 대답-REST와 마찬가지로, 시작해야 곳은 Roy Fielding의 논문입니다 . 특히 5 장 . 현재 질문에 대해서는 5.2.1 섹션을 원합니다.

REST는 네 가지 인터페이스 제약 조건으로 정의됩니다. 자원 식별; 표현을 통한 자원의 조작; 자기 설명 메시지; 그리고 응용 프로그램 상태 엔진으로서의 하이퍼 미디어.

자원

REST에서 정보의 주요 추상화는 자원입니다. 이름을 지정할 수있는 모든 정보는 문서 또는 이미지, 임시 서비스 (예 : "로스 앤젤레스의 오늘 날씨"), 기타 리소스 모음, 비가 상 객체 (예 : 사람) 등의 리소스가 될 수 있습니다. . 즉, 저자의 하이퍼 텍스트 참조의 대상이 될 수있는 모든 개념은 자원의 정의에 적합해야합니다. 리소스는 특정 시점의 매핑에 해당하는 엔터티가 아닌 엔터티 집합에 대한 개념적 매핑입니다.

대표

REST 구성 요소는 표시를 사용하여 해당 자원의 현재 또는 의도 된 상태를 캡처하고 해당 표시를 구성 요소간에 전송함으로써 자원에 대한 조치를 수행합니다. 표현은 일련의 바이트와 그 바이트를 설명하는 표현 메타 데이터입니다. 표현에 일반적으로 사용되지만 덜 정확한 이름에는 문서, 파일 및 HTTP 메시지 엔터티, 인스턴스 또는 변형이 포함됩니다.

표현은 데이터, 데이터를 설명하는 메타 데이터 및 메타 데이터를 설명하기위한 메타 데이터 (일반적으로 메시지 무결성을 확인하기 위해)로 구성됩니다.

"로스 앤젤레스의 오늘 날씨"는 자료입니다. 후보자 표현에는 다음이 포함됩니다. 국가 기상청의 최신 예측을 포함한 텍스트 문서 기상 레이더의 시각적 표현 및 예측의 오디오 녹음.


2

리소스는 당신이 작업하는 것입니다. 예를 들어 특정 램프를 전환하기위한 API가있는 경우 리소스는 램프 자체입니다. 리소스는 물리적 (예 : 램프, 사람) 또는 비 물리적 (예 : 기사, 역할, 데이터베이스의 행) 일 수 있으며, 리소스는 기본 (예 : 균형) 또는 파생 (예 : 트랜잭션) 일 수 있습니다. 자원은 특정 개체 (예 :이 램프 소켓에 설치된 다섯 번째 램프)를 참조하거나 다른 시간에 다른 개체에 매핑되는 역할 (예 : 현재 설치된 램프, 2008 년 8 월 5 일에 설치된 램프)을 나타낼 수 있습니다. 또는 여러 개체 (예 : 집안의 모든 램프)에 매핑 할 수 있습니다.

자원의 표현은 서비스가 자원의 상태 (예 : 램프의 상태를 나타내는 XML, JSON)와 통신하는 방법입니다.

REST API에서 자원은 URI (Uniform Identifier)로 식별됩니다. 단일 리소스에는 여러 표현이있을 수 있습니다. HTTP REST API에서는 일반적으로 HTTP Content-Type 및 Accept 헤더에 사용하려는 표현을 나타냅니다.

클라이언트 서버 아키텍처에서 중요한 한 가지 실현은 리소스를 클라이언트로 가져올 수 없으며 그렇게하는 것처럼 만들면 안된다는 것입니다. 대신 REST API에서는 자원 표현을 전송하여 자원을 원격으로 조작합니다. 클라이언트가 램프를 직접 조작 할 수 있도록 FedEx 램프를 사용하지 말고 서비스는 램프의 XML / JSON / protobuf / CSV 표현을 작성하고 클라이언트는 의도 된 조작의 표현을 전송합니다. 그런 다음 서비스는 클라이언트 대신 램프의 실제 상태를 조작하거나 클라이언트가 램프 작업을 수행 할 권한이없는 경우 요청을 거부합니다. 이것은 명백한 / 분열 된 머리처럼 보일 수 있지만, 주목해야 할 중요한 점은 표현 자체가 리소스 자체가 아니기 때문에,


1

자원은 송장 일 수 있습니다.

표현은 특정 시점의 JSON 형식 또는 XML 형식의 송장입니다. 나중에 정확히 동일한 송장이 동일한 자원이지만 잠재적으로 다른 상태 (취소, 지불 등)가 될 수 있습니다.

인보이스의 현재 상태 (예 : 데이터베이스의 모든 인보이스 데이터)를 가져 와서 특정 시점에 다른 장치 (예 : 브라우저)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.