 |
|
자원의 표현 형식
이 절에서는 RESTful한 경기 웹 서비스가 지원하는 자원을 표현하기 위해 일련의 XML 문서를 만들 것이다.
경기 URI
Acme Racing을 위해 이전 절에서 만든 RESTful한 API에서는 URI에 대해서는 다뤘지만 자원에 대해서는 다루지 않았다. 전에 언급했던 대로 REST에 관한 한 자원의 형식은 상관없다. 예를 들어 XML이든 바이너리 스트림이든 어떤 방향으로든 무엇이든 보낼 수 있다.
논쟁의 여지가 있긴 하지만 XML은 비즈니스 트랜잭션에서 머신과 머신 사이의 통신에서 쓰이는 공통어다. 따라서 RESTful한 서비스가 지원할 일련의 XML 문서를 만드는 건 당연하다. 경기라는 분야는 꽤나 단순하고 기존 데이터 모델도 사용할 수 있기 때문에 경기와 주자를 표현하는 XML 문서 몇 개를 정의하는 작업은 직관적이다.
예를 들어 경기는 Listing 1과 같은 XML로 정의될 수 있을 것이다.
Listing 1. 경기를 정의한 XML 문서
<race name="Mclean 1/2 Marathon" date="2008-05-12" distance="13.1" id="1">
<uri>/races/1</uri>
<description/>
</race>
|
<race>는 id를 갖고 있고 Listing 1에는 경기에 대한 정의의 일부로서 URI를 포함하고 있음을 주목하자. 이는 REST의 핵심 요소를 보여주고 있으며, 실제로 리소스는 서로 관련되어 있고 연결된다는 웹임을 보여주고 있다. 따라서 <race>는 RESTful한 표현 형식을 서술하는 <uri> 요소를 항상 포함한다. Listing 1의 XML은 어쨌거나 /races/1에 대한 GET 요청의 응답이다.
신규 경기를 생성하려면 id는 제외할 수 있다(특정 ID를 관리한다는 것은 여기서 만들려는 애플리케이션이 통제하는 요소이기 때문). 이는 <uri> 요소도 제외할 수 있음을 의미한다. 결과적으로 POST 요청은 Listing 2 정도가 될 것이다.
Listing 2. 경기 생성 XML
<race name="Limerick 2008 Half" date="2008-05-12" distance="13.4">
<description>erin go braugh and have a good time!</description>
</race>
|
주자는 어떨까? 주자는 경기와 연결되어 있다. 맞는가? 그렇다면 <race> 요소는 하나 이상의 <runner> 요소를 담도록 지원된다. Listing 3에 보였다.
Listng 3. 경기와 연관된 주자들
<race name="Limerick 200 Half" date="2008-05-12" distance="13.4" id="9">
<uri>races/9</uri>
<description>erin go braugh and have a good time!</description>
<runners>
<runner first_name="Linda" last_name="Smith" age="25" id="21">
<uri>/races/9/runner/21</uri>
</runner>
<runner first_name="Andrew" last_name="Glover" age="22" id="20">
<uri>/races/9/runner/20</uri>
</runner>
</runners>
</race>
|
예를 들어 Listing 3의 XML 문서는 URI /race/race_id/runner를 통해 반환된 내용일 것이다. 또한 API는 /race/race_id/runner/runner_idM URI를 통해 단일 주자에 수행된 CRUD 오퍼레이션도 지원한다.
따라서 이 CRUD에 대한 XML은 Listing 4와 같을 것이다.
Listing 4. CRUD XML
<race name="Mclean 1/2 Marathon" date="2008-05-12" distance="13.1" id="1">
<uri>/races1</uri>
<description />
<runner first_name="Andrew" last_name="Glover" age="32" id="1">
<uri>/races/1/runner/1</uri>
<result time="100.04" place="45" />
</runner>
</race>
|
경기가 이미 끝났다면 주자의 결과가 XML 문서 형태로 포함될 수 있음을 주목하자. 기억하자. POST 요청을 사용한다는 것은 주자를 생성한다는 의미다. 결과적으로 <runner> 요소의 id 속성은 존재하지 않는다.
|