7장 순수 하이퍼미디어 설계
왜 HTML인가?
- HTML은 세상에서 가장 인기 있는 하이퍼미디어 유형이다.
HTML의 기능
- 텍스트 문서의 중첩 구조를 표현할 수 있다.
- 택스트 콘텐트와 기타 태그를 표현할 수 있다.
하이퍼미디어 컨트롤
- HTML은 다음과 같은 하이퍼미디어 컨트롤을 내장하고 있다.
<link>,<a>,<img>, …
플러그인 애플리케이션 의미 체계
- HTML은 사람이 이해할 수 있는 문서를 다룬다.
- HTML은 원래의 용도 외의 목적으로 사용하기가 매우 쉽다.
- HTML4는 세 가지 일반 속성을 더 가진다.
rel: 연결되는 리소스와 지금 리소스 사이의 관계를 정의id: 문서 내 한 요소를 식별하는 고윳값class: 태그의 애플리케이션 의미 체계를 전달하는 용도(속하는 클래스를 정의)
마이크로포맷
- hCard같은 마이크로포맷은 HTML에 추가적인 애플리케이션 의미 체계를 더하게 해준다.
hMaze 마이크로포맷
- 새로운 hCard같은 마이크로포맷을 정의하는 것은 쉽다. 몇개의 클래스의 의미만 정의하면된다.
마이크로데이터
- 마이크로데이터는 HTML 5용으로 마이크로포맷을 다듬은 것이다.
- 다섯 개의 새로운 속성이 있다
itemprop: 마이크로포맷이 class 속성을 사용하던 방식으로 사용itemscope: boolean. 태그에 마이크로데이터가 있는가를 표시itemtype: 해당 마이크로데이터의 의미를 확인할 수 있는 곳itemiditemref
- 마이크로포맷을 사용할땐
class=hCard가 붙은 태그 내부가 모두 hcard 포맷임을 알 수 있다. - 마이크로데이터는 그렇지 않다.
itemscope내부는itemtype이 가리키는 문서로 작성되어 있다고 표현된다. - 예시
| |
- 마이크로포맷은 rel로 연결 관계를 정의할 수있지만 마이크로데이터는 그렇지 않다.
itemtype문서에는 나타날 것.
리소스 상태 변경하기
- 스위치를 누르면 리소스의 상태와 관계가 변경된다고 해보자
- 이 스위치를 조작하는 요청은 하이퍼미디어로 어떻게 구현될까?
폼에 애플리케이션 의미 체계 추가하기
- rel 속성은 두 리소스 사이의 관계를 나타낸다.
- ‘리소스 상태를 변경하라’는 의미를 가진 rel 값을 만들 수 있을까?
- 리소스들이 나열되고 그 리소스를 요청하는 것은 GET 요청이다.
- 하지만 리소스 상태 변경은 GET 요청을 쓸 수 없다. POST를 써야한다.
- 이때 HTML이 정의한 하이퍼미디어 폼을 사용하면 된다.
- 대신, rel 속성은 지원하지 않는다.
- 이 switch 클래스도 hMaze 마이크로포맷에 추가할 수 있겠다.
| |
하이퍼미디어의 대체재는 미디어다
- 요즘 API 문서들에는 많은 메서드가 개별 API 호출로 노출되고, 상세하게 문서화되어 있다.
- 이는 다시 말해, 사람이 읽을 문서를 하이퍼미디어 대체재로 사용하고 있다는 것이다.
- 사람 대신, 이 정보를 받도록 의도된 대상(소프트웨어)에 맞춰 작성해야 한다.
- 스위치를 나타내는 두 버전을 살펴보자
| |
| |
- 애초에 하이퍼미디어 컨트롤을 사용할 수 있을 때만 제시되므로, 셀에 있을때에만 조작할 수 있다는 경고문구는 제공할 필요도 없다.
HTML의 제약
- 기술적으로 HTML은 일반 하이퍼미디어 포맷이 아니라 도메인 특화 표준이다.
- 여기서 발생하는 한계들이 있다
- PUT, DELETE는 HTML 하이퍼미디어 컨트롤로는 표현할 수 없다.
- HTML 4의 폼은 두 가지 종류의 엔티티 바디만 만들 수 있다.
- application/x-www-form-urlencoded
- multipart/form-data
- HTML 4는 JSON과 달리 숫자와 문자열을 구분하지 않는다.
- HTML 4는 날짜를 표시할 방법을 정의하지 않는다.
HTML5가 문제를 해결해 줄까?
- 보완점
- 날짜 문제 ⇒
time태그로 해결 - 숫자 문제 ⇒ 일반적으로 동작하지 않음
- 몇 가지 컨트롤을 더 정의하나, 여전히 유용하지 않음
- input 태그 검증을 위한 방법 정의
- 날짜 문제 ⇒
- 일부는 보완되나, 하이퍼미디어 포맷으로서의 HTML을 급격히 변화시키지는 않는다.
하이퍼텍스트 애플리케이션 언어
- 웹 API에 특화되어 설계된, HTML의 기본 개념인 하이퍼링크만 가져온 HAL(Hypertext Application Language)가 있다.
- HAL은 두 가지 방식으로 제공된다.
- XML(application/hal+xml)
- JSON(application/hal+json)
- HTML과 HAL의 차이
HTML에는 여러가지 경우에 따라
<a>,<img>,<form>을 사용한다.HAL은
<resource>태그로만 말한다.- 태그 내의 것들이 어떤 HTML 리소스의 표현임을 말하는 유일한 방식
HAL에서
<link>는 활성화 될 때 어떤 HTTP 요청이든 보낼 수 있다.- 따라서 사람이 읽을 수 있는 문서에 이렇게 적혀야 한다.
1 2flip switch 안에 나타날 수 있다. POST 요청으로 활성화되면, 스위치를 작동시키는 효과가 있다.- 바꾸어말하면, 기계가 읽을 수 있는 방법으로는 프로토콜 의미 체계를 전달할 수 없다.
사이렌
- 엔티티(entities)라는 데이터의 추상적인 그룹을 표현하기 위해 설계되었음
- 장점 : 컬렉션 패턴에 잘 들어맞지 않은 상태 전이를 표시할 때 더 유연하다
- 단점: 클라이언트 측의 더 특별한 프로그래밍이 필요하다.
의미체계의 문제
- 현재까지 배운 것들
- HTTP : 클라이언트-서버 인터넷 프로토콜, 각기 다른 요청에 일반적은 의미를 부여
- 하이퍼미디어 : 서버가 클라이언트에게 다음에 전송할 만한 HTTP 요청을 알려줌
- 애플리케이션 의미 체계: 특정 HTTP 요청으로 애플리케이션이나 리소스에 어떤 구체적인 일이 일어나는지 하이퍼미디어 컨트롤에 추가해 확장
- API 구축에 사용할 수 있는 표준
- 도메인 특화 표준
- 문서에 적힌대로 클라이언트를 구현하면 된다.
- 따라서, 사람이 읽어야 한다. 컴퓨터는 읽을 수 없다.
- Collection+JSON, APP(Atom Publishing Protocol)
- 마이크로포맷, 마이크로데이터
- HTML, HAL, 사이렌등의 언어
- 도메인 특화 표준
- 현재는 모든 것을 만족하는 것은 기술적 한계로 불가능하다.