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

http://cxf.apache.org/blueprint/jaxrs

Spring

http://cxf.apache.org/jaxrs

18.3.4. 모델 스키마를 끝점에 연결하는 방법

모델 스키마를 정의하고 끝점에 연결하려면 다음 단계를 수행합니다.

  1. 선택한 삽입 플랫폼에 적절한 XML 네임스페이스(Blueprint XML 또는 Spring XML)를 사용하여 모델 스키마를 정의합니다.
  2. 최종 패키지(JAR, WAR 또는 OSGi 번들 파일)의 classpath에서 스키마 파일을 사용할 수 있도록 프로젝트 리소스에 모델 스키마 파일을 추가합니다.

    참고

    또는 끝점의 jaxrs:model 하위 요소를 사용하여 model 스키마를 직접 Cryostat-RS 엔드포인트에 포함할 수도 있습니다.

  3. 엔드포인트의 modelRef 속성을 클래스 경로의 모델 스키마 위치로 설정하여 모델 스키마를 사용하도록 엔드포인트를 구성합니다(클래스 경로 URL 사용).
  4. 필요한 경우 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/ Joe%20Bloggs 가 있는 매개변수는 Cryostat%20Bloggs로 삽입됩니다. 그렇지 않으면 매개변수가 bloggs로 삽입됩니다.

+

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.