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 스펙을 준수합니다.
값이 true인 wink.searchPolicyContinuedSearch 특성을 사용하여 이 동작을 수정합니다. 따라서 하위 자원 메소드가 요청과 일치하지 않으면 하위 자원 위치 지정자가 사용됩니다.
특성을 사용하려면 wink.searchPolicyContinuedSearch 특성과 값이 지정된 모듈의 WEB-INF 디렉토리에 특성 파일을 포함하십시오. 애플리케이션 모듈의 web.xml 파일에서 param-name 요소의 propertiesLocation 값이 설정된 init-param 요소를 포함하십시오. param-value 요소는 특성 파일의 위치(예: WEB-INF/my_wink.properties)를 지정합니다.
<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() { ...
프로시저
결과
자원에 대한 올바른 조작이 정의되었습니다.