2017-02-15 1 views
1

클라이언트 (다른 ​​앱)가 일부 작업 요청을 푸시하고 해당 작업 요청의 일부 ID를 받고 나중에 해당 작업 요청의 결과를 수신하도록 opprtunity를 제공하는 웹 API를 설계하고 있습니다. 그런 종류의 상호 작용을위한 전형적인 접근 방식은 무엇입니까? 작업 요청 결과를 제공함에 따라 SSE (서버 전송 이벤트) 및 Webscoket 기술에 대해 생각한 서버 푸시 상호 작용을 생각 나게하고 webSocket (클라이언트가 모든 종류의 요청에 대해 동일한 연결을 사용하고 모든 종류의 응답을받을 수 있음)에 대해 생각해 보았습니다. 그것은 내 목표를위한 좋은 선택일까요? 그리고 이것이 어떻게 확장 될 수 있는가?푸시 기반 API 디자인

+0

귀하의 질문은 너무 광범위합니다. 내가 웹 앱 녀석이 아니기 때문에 투표를 닫지 마라. – einpoklum

+0

@einpoklum 왜 그렇게? 질문은 websocket 기술이 api 디자인의 설명 된 접근 방식에 적합한 지 여부에 대한 것입니다. 그렇다면 더 나은 접근 방식이 궁금합니다. – maks

+0

@maks, 소프트웨어 설계 질문은 [이 사람] (http://softwareengineering.stackexchange.com)과 같은 다른 SO 사이트에 적합합니다 ... StackOverflow 커뮤니티는보다 실용적인 질문입니다. – Myst

답변

1

질문은 websocket 기술이 설명 된 API 설계 방법에 적합한 지 여부에 대한 질문입니다. 그렇지 않은 경우 더 나은 접근 방법이 궁금합니다. 그것은 내 목표를위한 좋은 선택일까요?

webSocket 연결은 미래의 불확정 한 시간에 결과를 수신하는 데 매우 적합하며 이렇게하는 것이 좋습니다.

클라이언트에서 서버로의 다른 요청은 ajax 호출이거나 webSocket 메시지로 전송 될 수 있습니다. 주로 요청을 아약스 호출로 사용할지 여부에 따라 달라집니다. 이미 webSocket 연결이 설정된 경우 서버와 편리하고 쉽고 빠르게 통신 할 수 있습니다.

당신이 뭘의 각 부분을 촬영 :

(클라이언트에서 서버에) 몇 가지 작업 요청을 누르면.

이것은 Ajax 또는 webSocket을 통해 똑같이 잘 수행 할 수 있습니다. 이미 설정된 webSocket 연결을 가질 다른 이유가 없다면, 이것은 전통적으로 Ajax 호출이 될 것입니다.

은, 바로 그 작업 요청이 실제로 당신이 아약스를 통해 작업 요청을 보내 그래서 만약 아약스는 요청/응답 프로토콜이기 때문에 Ajax 요청과 함께 할 조금 쉽게

의 일부 ID를받을 Ajax 요청에 대한 응답으로 ID를 다시 얻는 것은 사소한 일이다. webSocket을 통해이 작업을 수행 할 수도 있지만 webSocket은 메시징 프로토콜 일뿐입니다. 작업 요청을 서버에 보낼 때 webSocket을 통해 보낼 수 있습니다 (앞에서 언급했듯이). 그리고 서버는 작업 ID를 즉시 되돌려 보낼 수 있지만, 클라이언트는 이전에 보낸 요청과 돌아 오는 작업 ID를 상호 연관시키는 방법을 개발해야합니다. 두 메시지는 서로 자연스럽게 연결되지 않기 때문입니다. 상관 관계를 수행 할 수있는 한 가지 방법은 초기 요청을 보낼 때 클라이언트가 임시 ID 또는 해시 값을 생성하도록하는 것입니다 (문자 그대로 타임 스탬프와 같은 해당 클라이언트에 대해 고유 한 것이 될 수 있음). 그런 다음 서버는 동일한 임시 작업 ID를 보낼 때 ID를 반환합니다. 이 모든 것은 HTTP/Ajax와 같은 요청/응답 프로토콜을 사용하면 간단합니다.

나중에

HTTP 폴링, 웹 소켓 또는 SSE 모두 사용할 수있는 작업 요청의 결과를받을 수 있습니다. 폴링은 특히 효율적이지 않습니다. webSocket이 완벽하게 작동한다는 것을 알고 있으며, 서버가 푸시 방식으로 클라이언트에 보내려고하는 다른 항목에 대해 열린 도관을 제공합니다. SSE는 개인적으로 경험이 없어도이 문제를 해결하는 데 사용할 수 있습니다 (데이터를 클라이언트로 푸시).