2008-09-20 4 views
5

웹 서비스를 사용하면 원격 호출 수를 줄이기 위해 여러 서비스 호출을 하나의 메시지로 배치하는 것이 좋습니다. RESTful 서비스로이를 수행 할 수있는 방법이 있습니까?REST에서 일괄 처리

+1

의 foreach (requestBatch에 RestRequest REQ) requestResponseList.Add (webService.Call (REQ)); 일괄 적으로 RESTful 서비스를 호출하면 무엇을 의미합니까? 많은 요청 정의가 포함 된 요청 하나? –

답변

4

어떻게 일괄 처리 요청이 REST에서 의미가 있는지 알 수 없습니다. REST 기반 서비스의 URL은 수행 할 작업과이를 수행 할 데이터를 나타내므로 일괄 요청을하면 개념 모델이 심각하게 손상됩니다.

동일한 데이터를 여러 번 동일한 작업을 수행하는 경우는 예외입니다. 이 경우 요청 매개 변수에 대해 여러 값을 전달하거나 본문에서이 반복을 인코딩 할 수 있습니다 (단, PUT 또는 POST의 경우에만 작동합니다). Gliffy REST API는 본질적으로

POST /folders/ROOT/the/folder/name/users?userId=56&userId=87&userId=45 

를 통해 동일한 폴더에 여러 사용자를 추가 지원 :

다른 주석이 지적한 것처럼, GET에서 페이징 결과는 요청 매개 변수를 통해 수행 할 수 있습니다
PUT /folders/ROOT/the/folder/name/users/56 
PUT /folders/ROOT/the/folder/name/users/87 
PUT /folders/ROOT/the/folder/name/users/45 

:

GET /some/list/of/resources?startIndex=10&pageSize=50 

경우 REST 서비스를 지원합니다.

+0

매개 변수, 수행 할 REST 작업 컬렉션 및 해당 매개 변수를 취하는 GetBatch 작업을 만드는 경우 어떻게됩니까? 그런 다음 결과 세트가 상관 관계가있는 REST 조작에 의해 키순으로 리턴 될 수 있습니다. 이것은 또한 REST의 개념 모델을 위반하는 것입니까? – crush

-1

물론 방법이 있지만 서버 측 지원이 필요합니다. 내가 아는 모든 방법론에 맞는 마 법적 크기는 없습니다.

4

실제로 배치해야하는 경우 Http 1.1은 응답을 받기 전에 여러 요청을 보낼 수있는 HTTP 파이프 라이닝이라는 개념을 지원합니다. 그것을 확인하십시오 here

+1

동의 - 플러스 HTTP는 HTTP 파이프 라이닝으로 계속 활성 상태를 유지하며 동일한 REST API를 사용하는 동안 일괄 처리의 효과를 유지합니다. 일반적으로 서비스에 다른 REST API가 필요하지 않습니다. –

+0

우리는 이렇게 처리하고 멋지게 작동합니다. 어색한 다중성을 가진 외부 엔드 포인트가 필요하지 않습니다. org.apache.http.nio.protocol을 사용합니다.HttpAsyncRequestExecutor'와 클라이언트의'SSLNHttpClientConnectionFactory'를 호출합니다. 우리의 weblogic 서버는 즉시 사용할 수 있습니다. – SusanW

3

나는 Darrel Miller에 동의합니다. HTTP는 이미 HTTP 파이프 라이닝을 지원합니다. HTTP 지원은 동일한 소켓에서 동시에 여러 HTTP 작업을 스트리밍하여 서버에 새로운 요청을 스트리밍하기 전에 응답을 기다릴 필요가 없도록합니다.

HTTP 파이프 라이닝 및 연결 유지 동일한 기본 REST API를 사용하면서 일괄 처리의 효과를 얻습니다. 따라서 일반적으로 서비스에 다른 REST API가 필요 없습니다.

3

Astoria 팀은 여러 부분의 mime을 사용하여 여러 건의 호출을 보냈습니다. 멀티 파트 메시지가 원자 적 연산의 의도를 유추 할 수 있기 때문에 파이프 라이닝과는 다릅니다. 다소 우아 해 보입니다.