RESTful 애플리케이션에 대한 자원 메소드 정의

개별 자원은 지원되는 HTTP 메소드를 사용하여 해당 기능을 정의할 수 있습니다. REST(Representational State Transfer) 서비스에서 지원되는 메소드는 GET, PUT, DELETE, POST입니다. 모든 조작은 일반적으로 응답을 통해 미리 정의된 HTTP 메소드 중 하나를 사용하여 수행됩니다.

시작하기 전에

미리 정의된 HTTP 메소드 및 알려진 속성을 이해합니다. 일부 HTTP 메소드는 안전하거나(즉, 요청을 발행해도 자원이 변경되지 않음) 멱등성(즉, 조작의 다중 호출로도 결과가 변경되지 않음)의 특성을 보유합니다. HTTP 메소드가 특정 속성을 보유하도록 정의된 경우 서비스 구현은 정의를 준수합니다. HTTP 메소드의 공통 세트에 대해 자세히 학습하려면 HTTP 메소드 정의 정보를 참조하십시오.

이 태스크 정보

클라이언트는 특정 조작을 수행하기 위해 HTTP 메소드를 사용합니다. 각 시스템에서 고유한 인터페이스를 정의한 기타 분산 시스템과 달리, HTTP에 기반한 RESTful 시스템은 주로 미리 정의된 메소드에 의존합니다. 4개의 가장 일반적인 메소드는 GET, PUT, DELETE, POST입니다. 자원은 모든 클라이언트에서 모든 HTTP 메소드를 허용하지 않아도 됩니다.

HTTP GET 메소드는 자원 표시를 검색합니다. 이 방법은 안전하고 결과에 영향을 주지 않습니다(멱등성). 반복된 GET 요청으로도 자원은 변경되지 않습니다.

HTTP PUT 메소드는 종종 자원을 업데이트하거나 알려진 URL에서 새 엔티티를 작성하는 데 사용됩니다. 요청을 업데이트하거나 작성해야 하는 경우 메시지 본문이라고도 하는 요청 엔티티로 새 자원 데이터를 포함하는 자원 URL에서 HTTP PUT 메소드를 발행합니다. HTTP PUT 메소드는 멱등성의 특성을 보유합니다. 따라서 동일한 URL에 대해 동일한 엔티티를 보유하는 여러 동일한 PUR 요청은 하나의 PUT 요청을 발행한 경우와 같이 동일한 결과를 생성합니다. 이 메소드에서는 다른 관련 요청이 수행되지 않는다고 가정합니다.

HTTP DELETE 메소드는 특정 URL에서 자원을 제거합니다.

마지막 자원 URL이 알려지지 않은 경우 콜렉션에서 자원을 작성하는 동안 HTTP POST 메소드가 종종 사용됩니다. 예를 들어, 관리자가 1234567890과 같은 고유 ID의 사용자를 작성하는 /users 콜렉션 자원에 POST 요청을 발행합니다. 고유 ID는 /users/1234567790과 같은 새 사용자 자원을 설명하기 위한 URL 경로의 일부로 사용됩니다. 이 방법은 안전하지 않으며 결과에 영향을 줍니다(비멱등성). 이 경우 /users 콜렉션에 대한 다중 POST 요청은 계속해서 새 고유 ID를 작성하고 사용자가 동일한 정보를 보유하고 있어도 이 새 ID를 사용자 콜렉션에 추가할 수 있습니다.

대부분의 RESTful 서비스가 예측 결과를 제공하는 잘 알려져 있는 HTTP 메소드를 사용하기 때문에 더 쉽게 클라이언트를 작성할 수 있습니다. RESTful 서비스 개발자는 HTTP 메소드의 예상된 동작을 활용할 수 있습니다. 또한 자원 메소드는 자원을 식별하기 위해 경로 매개변수, 쿼리 매개변수 또는 매트릭스 매개변수와 같은 매개변수를 사용할 수 있습니다. 자세히 학습하려면 자원에 대한 요청 표시의 매개변수 사용 정의를 참조하십시오.

(선택사항) 동일한 자원 클래스에서 동일한 값이 설정된 @Path 어노테이션을 포함하는 하위 자원 메소드 및 하위 자원 위치 지정자 메소드가 있으면 기본적으로 호출할 메소드를 판별할 때 하위 자원 위치 지정자는 고려하지 않습니다. 이는 JAX-RS 스펙을 준수합니다.

값이 truewink.searchPolicyContinuedSearch 특성을 사용하여 이 동작을 수정합니다. 따라서 하위 자원 메소드가 요청과 일치하지 않으면 하위 자원 위치 지정자가 사용됩니다.

특성을 사용하려면 wink.searchPolicyContinuedSearch 특성과 값이 지정된 모듈의 WEB-INF 디렉토리에 특성 파일을 포함하십시오. 애플리케이션 모듈의 web.xml 파일에서 param-name 요소의 propertiesLocation 값이 설정된 init-param 요소를 포함하십시오. param-value 요소는 특성 파일의 위치(예: WEB-INF/my_wink.properties)를 지정합니다.

다음 예제에서는 web.xml 파일을 보여줍니다.
<servlet>
    ...
    ...
    <init-param>
        <param-name>propertiesLocation</param-name>
        <param-value>/WEB-INF/my_wink.properties</param-value>
    </init-param>
</servlet>
다음 예제는 WEB-INF/my_wink.properties 특성 파일을 보여줍니다.
wink.searchPolicyContinuedSearch=true

다음 코드 예제에서 요청 URL은 sayhello로 종료되지만, 요청은 GET 대신 POST를 포함하므로 HTTP 405 허용되지 않은 메소드 오류 메시지가 리턴됩니다. 405를 방지하기 위해 전송된 HTTP 메소드가 메소드 어노테이션과 일치하는지 확인하십시오.

@javax.ws.rs.Path("helloworld")
public class SampleResource {

...

@javax.ws.rs.Path("sayhello")
@javax.ws.rs.GET
public String getHello() { ...

프로시저

  1. 애플리케이션에서 자원 유형을 식별하십시오.
    각 자원 클래스에서 지원되는 각 HTTP 메소드에 대해 호출할 메소드를 작성하거나 기존 메소드를 식별합니다. HTTP 요청에 응답하는 메소드는 자원 메소드라고도 합니다. 자원 클래스의 각 자원 메소드에 대해 @javax.ws.rs.GET, @javax.ws.rs.POST, @javax.ws.rs.DELETE 또는 @javax.ws.rs.PUT와 같은 단일 JAX-RS HTTP 메소드 어노테이션으로 Java™ 메소드에 어노테이션을 작성하십시오. 예를 들어, HTTP GET 메소드가 BooksCollection 클래스에 의해 지원되면, 다음 스니펫과 같은 메소드를 작성하고 어노테이션을 작성할 수 있습니다.
    @javax.ws.rs.Path("/bookstore/books/")
    public class BooksCollection {
        @javax.ws.rs.GET
        public String getBooksCollection() {
            String str = /* Construct a String representation of the resource. */
            return str;
        }
    }
    웹 브라우저 또는 다른 HTTP 클라이언트를 사용하여 HTTP GET 요청을 http://<host_name>:<port>/<context_root>/<servlet_path>/bookstore/books URL에 발행하면 이전 getBooksCollection() 메소드가 호출됩니다.
  2. 자원이 필수 HTTP 메소드를 지원하는지 확인하십시오.
    일반적으로 각 자원에는 다중 자원 메소드가 있습니다. 예를 들어, 다음과 같습니다.
    @javax.ws.rs.Path(“/bookstore/books/{bookID}”)
    public class Book {
        /* This is a database key. */
        private String ISBN;
    
        public Book(@javax.ws.rs.PathParam("bookID") String ISBN) {
            this.ISBN = ISBN;
        }
    
        @javax.ws.rs.GET
        public String retrieveSpecificBookInformation() {
            /* This code retrieves a book resource based on the ISBN key. */
        }
    
        @javax.ws.rs.PUT
        public String updateBookInformation(String updatedBookInfo) {
            /* This code updates the book resource based on ISBN key and the entity (message body) sent
             in the request that is stored in updatedBookInfo. */
        }
    
        @javax.ws.rs.DELETE
        public void removeBook() {
            /* This code deletes a book resource based on ISBN key. */
        }
    }
    웹 브라우저 또는 다른 HTTP 클라이언트를 사용하여 HTTP GET 요청을 http://<host_name>:<port>/<context_root>/<servlet_path>/bookstore/books/<isbn_number> URL에 발행하면 retrieveSpecificBookInformation() 메소드가 호출됩니다. 동일한 URL로 HTTP GET 요청을 전송하면 updateBookInformation 메소드를 호출하고 요청 메시지 본문의 컨텐츠는 updatedBookInfo 오브젝트의 값으로 전달됩니다. 마지막으로 동일한 URL에 HTTP DELETE 요청을 전송하면 removeBook() 메소드가 호출됩니다.
    문제점 방지 문제점 방지: JAX-RS 스펙에 따라, 동일한 자원 메소드에 @javax.ws.rs.POST 또는 @javax.ws.rs.PUT과 같은, 다중 HTTP 메소드 어노테이션을 배치해서는 안 됩니다. HTTP 메소드는 고유하게 시맨틱을 정의하므로 다중 HTTP 메소드에 대해 자원 메소드를 사용하지 마십시오. gotcha

결과

자원에 대한 올바른 조작이 정의되었습니다.


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



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