RESTful 애플리케이션에서 자원의 URI 패턴 정의

REST(Representational State Transfer) 서비스는 자원 조작에 기반합니다. RESTful 서비스의 자원은 주소 지정 가능하며, URL은 REST에서 주소 지정 기능을 획득하는 기본적인 방법입니다.

시작하기 전에

RESTful 서비스로 게시하려는 애플리케이션의 자원을 식별합니다.

이 태스크 정보

URL은 자원 위치를 지정하는 데 사용됩니다. 서버 및 클라이언트 간 상호작용은 URL에 대한 HTTP 작업 실행에 기반합니다. 자원을 초기에 검색한 후에 일정 시간이 지나서 클라이언트는 자원에 직접 주소를 지정할 수 있으므로 URL 패턴 정의가 중요합니다.

URL은 일반적으로 웹 브라우저에 주소를 입력할 때 사용됩니다(예: http://www.ibm.com/ 또는 http://www.example.com/bookstore/books/ISBN123). URL은 사용자가 이해하지 않아도 되지만, 이해 가능한 패턴으로 논리 URL을 제공하는 RESTful 서비스에서는 클라이언트 애플리케이션 개발자가 보다 효율적으로 작업을 진행할 수 있습니다.

RESTful 클라이언트는 자원을 조작할 때 URL을 사용합니다. 각 자원에는 고유한 URL이 있어야 합니다. 일부 URL 패턴은 고유 ID가 추가된 콜렉션 경로를 보유합니다. 예를 들어, http://www.example.com/bookstore/books를 콜렉션 자원 URL로, http://www.example.com/bookstore/books/ISBN123을 고유한 서적 자원 URL로 사용하고 http://www.example.com/bookstore/books/ISBN123/authors를 사용하여 ISBN123 작성자를 설명하는 콜렉션 자원을 검색할 수 있습니다.

이러한 기능은 애플리케이션의 사용 및 성능에 영향을 줄 수 있기 때문에 애플리케이션 개발자는 URL의 세분성을 신중히 고려해야 합니다. 예를 들어, 서적 자원의 일부로 서적의 작성자 정보를 포함하거나 서적 자원에서 참조하는 고유한 URL을 통해 고유 자원으로 작성자 정보를 정의할 수 있습니다. 자원 재사용에 따라 작성자가 다른 서적을 작성한 경우 서적 자원의 하이퍼링크에서 참조하는 작성자 정보에 대해 별도의 자원을 정의하는 것이 보다 효율적일 수 있습니다.

클라이언트에 초기 URL을 지정한 후 후속 관련 요청은 현재 자원을 구문 분석하여 검색할 수 있습니다. 서적 예제에서, http://www.example.com/bookstore/books/에 대한 GET 요청은 http://www.example.com/bookstore/books/ISBN123을 포함할 수 있는 서적 URL 목록을 검색합니다.

시스템은 사용 가능한 자원에 의존하므로 URL은 일반적으로 수명이 설정됩니다. HTTP에는 경로 재지정을 위한 기본 상태 코드가 있으므로(예: 301 영구 이동 및 307 임시적으로 경로 재지정) 캐시를 사용하는 사용자 및 클라이언트는 종종 이전에 검색된 URL을 먼저 재사용합니다. 또한 URL 패턴에서 버전 ID를 포함하는 방법을 고려할 수도 있습니다(예: http://www.example.com/bookstore/v2/books/ISBN123). Java™ 코드를 사용하여 인터페이스를 정의하는 작업을 포함하는 계획과 같이, 예상되는 수명 때문에 URL 패턴은 신중하게 선택해야 합니다.

JAX-RS(Java API for RESTful Web Services)에서는 Java 클래스 파일 또는 Java 메소드에 @Path 어노테이션을 추가하여 자원의 상대적 URL을 정의해야 합니다. JAX-RS 하위 자원 위치 지정자 및 하위 자원 메소드를 사용하여 자원을 정의할 수 있습니다. URL에서 경로 매개변수 또는 매트릭스 매개변수와 같은 매개변수를 사용하여 자원을 식별합니다.

@Path 어노테이션의 값은 자원에 대한 전체 URL의 상대적 파트를 정의합니다. 기본 URL은 애플리케이션 모듈의 web.xml 파일에서 도메인, 포트, 애플리케이션 모듈 컨텍스트 루트, URL 패턴 맵핑에서 파생됩니다. 예를 들어, 도메인이 www.example.com이고, 포트가 9060이고, 모듈 컨텍스트 루트가 example이고, 서블릿 URL 패턴이 store/*이고, @Path 어노테이션 값이 /bookstore/books인 경우, 전체 URL은 http://www.example.com:9060/example/store/bookstore/books입니다.

프로시저

  1. 애플리케이션에서 자원 유형을 식별하십시오. 두 가지 유형의 자원, BooksCollection 및 개별 서적 오브젝트가 있다고 가정합니다. 이 자원은 다음 클래스 정의를 포함합니다.
    public class BooksCollection {
        public BooksCollection() {
            /* no argument constructor */
        }
    
    }
    
    public class Book {
        public Book(String ISBN) {
            /* This constructor has an argument that will be annotated with a JAX-RS annotation.
             See the JAX-RS specification for information on valid constructors. */
        }
    }
    JAX-RS 스펙에서 정의한 대로, 기본적으로 자원 인스턴스는 요청에 따라 작성됩니다. JAX-RS 런타임 환경에서 자원 인스턴스를 작성하려면 인수 없는 생성자 또는 JAX-RS 어노테이션이 있는 매개변수만 포함하는 생성자를 보유해야 합니다.
  2. 각 자원 클래스에 @javax.ws.rs.Path 어노테이션을 추가하십시오.  각 @javax.ws.rs.Path 어노테이션의 경우 애플리케이션의 기본 URL 뒤에 URL의 일부로 값을 설정하십시오.
    /*
     * BooksCollection.java
     * This Java class represents the books collection URL at /bookstore/books.
     */
    @javax.ws.rs.Path("/bookstore/books/")
    public class BooksCollection {
    
    }
    애플리케이션을 완료한 후 http://<host_name>:<port>/<context_root>/<servlet_path>/bookstore/books를 방문하여 자원을 사용할 수 있습니다. 이 URL의 경우 컨텍스트 모듈 이후에 URL 파트로 컨텍스트 루트 값을 지정하십시오. 있는 경우 web.xml 파일에서 URL 패턴으로 서블릿 경로를 지정하십시오.
  3. (선택사항) 자원이 URL의 파트를 매개변수로 사용해야 하는지 판별하십시오. 자원이 매개변수로 URL의 파트를 사용해야 하는 경우(예: ID) 정규식에서 @javax.ws.rs.Path 어노테이션을 사용할 수 있습니다. 자원 생성자 또는 자원 메소드에서 @javax.ws.rs.PathParam 어노테이션을 추가할 수 있습니다.
    /*
     * Book.java represents individual books.
      */
    @javax.ws.rs.Path(“/bookstore/books/{bookID}”)
    public class Book {
       public Book(@javax.ws.rs.PathParam("bookID") String ISBN) {
    
       }
    }
    http://<host_name>:<port>/<context_root>/<servlet_path>/bookstore/books/ISBN_number에 대한 HTTP 요청이 작성된 경우 생성자의 ISBN 매개변수로 전달되는 ISBN_number로 서적 인스턴스가 작성됩니다.

    다른 가능한 매개변수에 대한 자세한 정보는 RESTful 애플리케이션에서 자원에 대한 요청의 매개변수 정의를 참조하십시오.

  4. 클래스가 JAX-RS 애플리케이션의 일부인 JAX-RS 런타임 환경을 정의할 javax.ws.rs.core.Application 서브클래스를 작성하십시오. 자원 클래스가 getClasses() 메소드에서 리턴됩니다. 예를 들어, 다음과 같습니다.
    public class BookApplication extends javax.ws.rs.core.Application {
        public Set<Class<?>> getClasses() {
            Set<Class<?>> classes = new HashSet<Class<?>>();
            classes.add(BooksCollection.class);
            classes.add(Book.class);
            return classes;
        }
    }

    javax.ws.rs.core.Application 서브클래스를 정의하여 해당 메소드에서 리턴된 클래스는 JAX-RS 런타임 환경에 등록됩니다. web.xml 파일을 구성할 때, 서블릿 또는 필터에 대한 매개변수로 javax.ws.rs.core.Application 서브클래스를 지정해야 합니다. 자세한 정보는 JAX-RS 애플리케이션에 대한 web.xml 파일 구성을 참조하십시오.

결과

RESTful 서비스에 대한 자원을 식별할 URL을 작성합니다. 애플리케이션 디자인에서 조기에 URL 패턴에 대한 문제를 고려하면 RESTful 서비스는 연장된 기간에 걸쳐 사용성 및 가치를 향상시킵니다.

다음에 수행할 작업

정의된 URL에 자원이 존재합니다. 그러나 자원에는 GET, POST, PUT 또는 DELETE와 같은 HTTP 메소드 조치를 처리하는 메소드가 아직 없습니다. 지원되는 HTTP 메소드를 사용하는 자원의 기능을 정의하는 방법을 자세히 학습하려면 RESTful 애플리케이션에 대한 자원 메소드 정의를 참조하십시오.


주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_defresource_uri
파일 이름:twbs_jaxrs_defresource_uri.html