18.3. 모델 스키마를 사용하여 REST 서비스 정의
18.3.1. 주석이 없는 RESTful 서비스
Cryostat-RS 모델 스키마를 사용하면 Java 클래스에 주석을 달지 않고도 RESTful 서비스를 정의할 수 있습니다. 즉, @Path
매개 변수,@PathParam
,@Consumes
,@Produces
와 같은 주석을 Java 클래스(또는 인터페이스)에 직접 추가하는 대신 모델 스키마를 사용하여 별도의 XML 파일에 모든 관련 REST 메타데이터를 제공할 수 있습니다. 예를 들어 서비스를 구현하는 Java 소스를 수정할 수 없는 경우 유용합니다.
18.3.2. 모델 스키마 예
예 18.1. “샘플 Cryostat-RS 모델 스키마” BookStoreNoAnnotations
루트 리소스 클래스에 대한 서비스 메타데이터를 정의하는 모델 스키마의 예를 보여줍니다.
예 18.1. 샘플 Cryostat-RS 모델 스키마
<model xmlns="http://cxf.apache.org/jaxrs"> <resource name="org.apache.cxf.systest.jaxrs.BookStoreNoAnnotations" path="bookstore" produces="application/json" consumes="application/json"> <operation name="getBook" verb="GET" path="/books/{id}" produces="application/xml"> <param name="id" type="PATH"/> </operation> <operation name="getBookChapter" path="/books/{id}/chapter"> <param name="id" type="PATH"/> </operation> <operation name="updateBook" verb="PUT"> <param name="book" type="REQUEST_BODY"/> </operation> </resource> <resource name="org.apache.cxf.systest.jaxrs.ChapterNoAnnotations"> <operation name="getItself" verb="GET"/> <operation name="updateChapter" verb="PUT" consumes="application/xml"> <param name="content" type="REQUEST_BODY"/> </operation> </resource> </model>
18.3.3. 네임스페이스
모델 스키마를 정의하는 데 사용하는 XML 네임스페이스는 블루프린트 XML 또는 Spring XML에서 해당 Cryostat-RS 끝점을 정의하는지 여부에 따라 달라집니다. 다음 표에서는 어떤 XML 언어에 사용할 네임스페이스를 보여줍니다.
XML 언어 | 네임스페이스 |
---|---|
Blueprint | |
Spring |
18.3.4. 모델 스키마를 끝점에 연결하는 방법
모델 스키마를 정의하고 끝점에 연결하려면 다음 단계를 수행합니다.
- 선택한 삽입 플랫폼에 적절한 XML 네임스페이스(Blueprint XML 또는 Spring XML)를 사용하여 모델 스키마를 정의합니다.
최종 패키지(JAR, WAR 또는 OSGi 번들 파일)의 classpath에서 스키마 파일을 사용할 수 있도록 프로젝트 리소스에 모델 스키마 파일을 추가합니다.
참고또는 끝점의
jaxrs:model
하위 요소를 사용하여 model 스키마를 직접 Cryostat-RS 엔드포인트에 포함할 수도 있습니다.-
엔드포인트의
modelRef
속성을 클래스 경로의 모델 스키마 위치로 설정하여 모델 스키마를 사용하도록 엔드포인트를 구성합니다(클래스 경로 URL 사용). -
필요한 경우
jaxrs:serviceBeans
요소를 사용하여 루트 리소스를 명시적으로 인스턴스화합니다. 모델 스키마가 기본 인터페이스를 참조하는 대신 루트 리소스 클래스를 직접 참조하는 경우 이 단계를 건너뛸 수 있습니다.
18.3.5. 클래스를 참조하는 모델 스키마 구성
모델 스키마가 루트 리소스 클래스에 직접 적용되는 경우 모델 스키마가 루트 리소스 빈을 자동으로 인스턴스화하므로 jaxrs:serviceBeans
요소를 사용하여 루트 리소스 빈을 정의할 필요가 없습니다.
예를 들어 customer-resources.xml
이 메타데이터를 고객 리소스 클래스와 연결하는 모델 스키마인 경우 다음과 같이 customerService
서비스 끝점을 인스턴스화할 수 있습니다.
<jaxrs:server id="customerService" address="/customers" modelRef="classpath:/org/example/schemas/customer-resources.xml" />
18.3.6. 인터페이스를 참조하는 모델 스키마 구성
모델 스키마가 Java 인터페이스(루트 리소스의 기본 인터페이스)에 적용되는 경우 엔드포인트에서 jaxrs:serviceBeans
요소를 사용하여 루트 리소스 클래스를 인스턴스화해야 합니다.
예를 들어 customer-interfaces.xml
이 메타데이터를 고객 인터페이스와 연결하는 모델 스키마인 경우 다음과 같이 customerService
서비스 끝점을 인스턴스화할 수 있습니다.
<jaxrs:server id="customerService" address="/customers" modelRef="classpath:/org/example/schemas/customer-interfaces.xml"> <jaxrs:serviceBeans> <ref component-id="serviceBean" /> </jaxrs:serviceBeans> </jaxrs:server> <bean id="serviceBean" class="service.CustomerService"/>
18.3.7. 모델 스키마 참조
모델 스키마는 다음 XML 요소를 사용하여 정의됩니다.A model schema is defined using the following XML elements:
model
-
모델 스키마의 루트 요소입니다. 모델 스키마(예:
modelRef
특성을 사용하여 Cryostat-RS 끝점에서)를 참조해야 하는 경우 이 요소에id
특성을 설정해야 합니다. model/resource
리소스
요소는 메타데이터를 특정 루트 리소스 클래스(또는 해당 인터페이스와 연결)와 연결하는 데 사용됩니다.리소스
요소에서 다음 특성을 정의할 수 있습니다.속성 설명 + name
이 리소스 모델이 적용되는 리소스 클래스(또는 해당 인터페이스)의 이름입니다.
+
path
이 리소스에 매핑되는 REST URL 경로의 구성 요소입니다.
+
사용
이 리소스에서 사용하는 콘텐츠 유형(예:
application/xml
또는application/json
)을 지정합니다.+
생성
이 리소스에서 생성하는 콘텐츠 유형(예:
application/xml
또는application/json
)을 지정합니다.+
model/resource/operation
작업
요소는 메타데이터를 Java 메서드와 연결하는 데 사용됩니다.작업
요소에서 다음 특성을 정의할 수 있습니다.속성 설명 + name
이 요소가 적용되는 Java 메서드의 이름입니다.
+
path
이 메서드에 매핑되는 REST URL 경로의 구성 요소입니다. 이 속성 값에는 매개변수 참조가 포함될 수 있습니다(예:
path="/books/{id}/chapter
"). 여기서{id}
는 경로에서id
매개변수 값을 추출합니다.+
verb
이 메서드에 매핑되는 HTTP 동사를 지정합니다. 일반적으로
GET
,POST
,PUT
또는DELETE
중 하나입니다. HTTP 동사를 지정하지 않으면 Java 메서드가 하위 리소스 오브젝트에 대한 참조를 반환하는 하위 리소스 locater 라고 가정합니다(리소스 요소를 사용하여 하위 리소스 클래스도 제공되어야 함).+
사용
이 작업에서 사용하는 콘텐츠 유형(예:
application/xml
또는application/json
)을 지정합니다.+
생성
이 작업에서 생성한 콘텐츠 유형(예:
application/xml
또는application/json
)을 지정합니다.+
OneWay
true
인 경우 작업을 단방향 으로 구성합니다. 즉, 응답 메시지가 필요하지 않음을 의미합니다. 기본값은false
입니다.+
model/resource/operation/param
param
요소는 REST URL에서 값을 추출하여 메서드 매개변수 중 하나에 삽입합니다.param
요소에서 다음 속성을 정의할 수 있습니다.속성 설명 + name
이 요소가 적용되는 Java 메서드 매개 변수의 이름입니다.
+
type
REST URL 또는 메시지에서 매개변수 값을 추출하는 방법을 지정합니다.
PATH
,QUERY
,MATRIX
,HEADER
,COOKIE
,FORM
,CONTEXT
,REQUEST_BODY
값 중 하나로 설정할 수 있습니다.+
defaultValue
REST URL 또는 메시지에서 값을 추출할 수 없는 경우 매개 변수에 삽입할 기본값입니다.
+
인코딩된
true
인 경우 매개변수 값은 URI 인코딩 양식(즉,%nn
인코딩 사용)에 삽입됩니다. 기본값은false
입니다. 예를 들어, URL 경로에서 매개 변수를 추출하는 경우 인코딩된 설정이true
로 설정된/name/
가 있는 매개변수는 Cryostat%20Bloggs로 삽입됩니다. 그렇지 않으면 매개변수가 bloggs로 삽입됩니다.Joe%20Bloggs
+