서버의 항목 대기열을 고려하십시오. 그런 다음 클라이언트는 REST 웹 서비스를 사용하여 대기중인 10 개의 항목을 한 번에 읽습니다. 당연히 클라이언트가 이러한 항목을 소비하면 서버는 서버 측에서 제거해야합니다.RESTful 웹 서비스의 결과를 소비 한 후 ACK를 보냅니 까?
Q : 견고성, 네트워크 부하 및 안정성을 모두 고려할 때 가장 좋은 방법은 무엇입니까?
나는 세 가지 솔루션을 생각할 수 있습니다 :
클라이언트는 새 항목을 요청합니다. 그러면 서버가 ...
- 은 항목 1..10 (
GET
)을 보내고 즉시 제거합니다. 바라건대 아이템이 클라이언트에 도착했기를 바랍니다. - 은 항목 1..10 (
GET
)을 보내고 클라이언트는 1.10 (DELETE
)의 ACK를 보내고 서버는 항목을 제거합니다. - 은 항목 1..10 (
GET
)을 보냅니다. 다음에 클라이언트가 11..20 (GET
)을 요청하면 이전 항목이 서버에서 제거됩니다.
나는 # 1과 # 3 모두가 편안한 원리를 위반한다고 생각합니다. 예 : DELETE
메서드 만 개체를 삭제할 수 있습니다. 그러나 둘 다 ACK 명령에 대한 데이터 트래픽을 피합니다.
가장 좋은 점은 확실하지 않습니다. 아마도 더 나은 해결책이있을 것입니다.
클라이언트와 서버 사이에 제안 된 요청/응답을보다 자세히 설명하는 것이 유용 할 수 있습니다. 예를 들어, 클라이언트가 "새로운 아이템을 요청할 것"이라고 가정한다면 ** GET을 발행하고 서버는 응답 할 것이고 ('200 Ok' ???), 혼란이 없을 것입니다. 여부 "항목이 클라이언트에 도착". 질문이 제기되는 방식으로 REST 스타일의 상호 작용을 설명하는 것처럼 들리지는 않습니다. 그래서 아마도 나는 뭔가를 놓치고 있습니다. – toddsundsted
물론입니다. 그러나 서버가 200OK로 응답하면 해당 정보는 클라이언트에게도 전송되어야합니다. 맞습니까? 서버가 데이터를 출력한다고해서 클라이언트가받은 것을 의미하지는 않습니까? – l33t
아니, 네 말이 맞아. 그래서'GET'은 멱등수 (idempotent) 여야합니다. 이것은 1과 3에서 문제가되는 것입니다. 내가 보았던 일반적인 접근법은 'GET'이 'DELETE'를 따르는 것입니다. 성공한. 그러나 그것은 두 번의 왕복입니다.따라서 고객에게 보장 된 배달으로 검색 및 삭제가 가능한 것을 찾고 있습니까? – toddsundsted