2 엔드 포인트와 REST API를 감안할 때 :REST API에서 콜백이 필요한 이유는 무엇입니까?
http://example.com/api/send?id=someId
클라이언트 측 :
이 엔드 포인트에 대한 호출 코드에 asynchrnously 이루어집니다.
서버 측 :
요청을 수신 할 때, 몇 asynchrnous 작업이 시작됩니다. 서버는
await
키워드를 사용하여 이러한 비동기 작업의 결과를 기다리고 있습니다. 마침내 결과를 반환합니다.이 엔드 포인트에 대한 호출 코드에 asynchrnously 이루어집니다 : 클라이언트 측 http://example.com/api/sendAsync?id=someId&callbackUrl=http://something.com/done
.
서버 측 :
요청을 수신 할 때, 몇 asynchrnous 작업이 시작됩니다. 서버는 즉시 ID를 가진 결과를 반환하여 작업을 식별합니다. 결과를 사용할 수있을 때마다 서버는 결과 및 ID를 사용하여 callbackUrl을 호출합니다.
두 번째 방법이 필요한 이유는 무엇입니까?
제게는 첫 번째 접근 방식이 좋을 것 같습니다. 서버가 await
키워드를 사용하여 결과를 기다리면 키워드 이후의 모든 항목이 연속으로 등록되므로 차단하지 않습니다. 또한 클라이언트 측은 비동기 웹 요청이므로 비 차단입니다.
두 번째 방법은 매우 오래 걸리는 요청 (+ 5 분)이라면 유용 할 수 있다는 것을 알고 있습니다. - 그러나, 나는 뭔가를 놓치고있는 것처럼 느낄 수 없습니다. 나는 더 두개의 용도를 볼 수 있습니다
답해 주셔서 감사합니다 :-) - API는 전역이며 따라서 재활용되지 않는'MessageQueue' (액터 모델)을 사용합니다. - 따라서 짧은 두 번째 접근법은 완료하는 데 오랜 시간이 걸릴 수있는 작업에만 관련이 있습니다. – ebb
예, 다른 것은 과도하고 클라이언트 측에서 사용하기가 더 어렵습니다. API를 잠재적 인 사용자로 생각하면 요청을하고 즉시 알 수있는 모든 것을 포함하여 응답을받을 수 있다면 훨씬 쉽습니다. 요청을 받으면 콜백을 할 때까지 API 결과에 실제로 의존한다면 자신의 논리를 계속하기 전에 몇 초 (또는 그 이상) 기다려야 할 것입니다. 따라서 코드 작성 및 유지 관리가 훨씬 더 어려워 질 수 있습니다. –