짧고 직접적인 답변
요청이 작업 목록을 실행하는 것에 대해 말하고 있기 때문에 (작업은 여기서 말하는 리소스입니다), 작업 그룹이 실행으로 이동 한 경우 (즉, 실행 결과에 관계없이) 합리적입니다. 응답 상태는입니다 200 OK
. 같은 실패 확인 등의 작업 그룹의 실행을 방지 할 문제가 있다면 그렇지 않으면, 작업 개체 , 또는 필요한 서비스, 예를 들어, 다음 응답 상태가 오류를 의미한다 사용할 수 없습니다. 과거에 작업 실행이 시작될 때 수행 할 작업이 요청 본문에 표시되는 것을 보면 실행 결과가 응답 본문에 나열 될 것으로 기대합니다.
길고 철학적 인 답변
HTTP가 설계된 것과 다른 점 때문에이 딜레마가 발생합니다. 자원을 관리하기 위해 상호 작용하지 않고 오히려 원격 메소드 호출의 수단으로 사용하고 있습니다 (매우 이상하지는 않지만 선입견 없이는 제대로 작동하지 않습니다).
위의 내용을 말하고이 답변을 긴 의견으로 안내 할 용기가 없다면 다음은 자원 관리 접근 방식을 따르는 URI 체계입니다.
/tasks
GET
페이지 매김 된 모든 작업을 나열합니다.
POST
하나의 작업을 추가
/tasks/task/[id]
GET
단일 작업의 상태 객체로 응답
DELETE
작업 취소 / 삭제
/tasks/groups
GET
페이지 매김 된 모든 작업 그룹을 나열합니다.
POST
작업 그룹을 추가합니다
/tasks/groups/group/[id]
GET
작업 그룹의 상태로 응답
DELETE
작업 그룹을 취소 / 삭제
이 구조는 자원에 대해 다루지 않고 자원에 대해 이야기합니다. 리소스로 수행되는 작업은 다른 서비스의 문제입니다.
또 다른 중요한 점은 HTTP 요청 처리기에서 오랫동안 차단하지 않는 것이 좋습니다. UI와 마찬가지로 HTTP 인터페이스는 응답 속도가 빨라야합니다 (이 계층은 IO를 처리하기 때문에).
버튼을 클릭 할 때 리소스를 엄격하게 관리하는 HTTP 인터페이스를 설계하는 것은 UI 스레드에서 작업을 옮기는 것만 큼 어렵습니다. HTTP 서버는 요청 핸들러에서 태스크를 실행하지 않고 다른 서비스와 통신하여 태스크를 실행해야합니다. 이것은 얕은 구현이 아니며 방향의 변화입니다.
이러한 URI 체계가 사용되는 방법에 대한 몇 가지 예
단일 작업 실행 및 진행 상황 추적 :
POST /tasks
실행할 작업과 함께
GET /tasks/task/[id]
completed
현재 상태 / 진행률을 표시하면서 응답 객체 가 양수 값을 가질 때까지
단일 작업을 실행하고 완료를 기다리는 중 :
POST /tasks
실행할 작업과 함께
GET /tasks/task/[id]?awaitCompletion=true
completed
양수 값을 가질 때까지 (시간 종료 가능성이 있으므로 이것이 반복되어야 함)
작업 그룹 실행 및 진행 상황 추적 :
POST /tasks/groups
실행할 작업 그룹과 함께
GET /tasks/groups/group/[groupId]
응답 객체 completed
속성에 개별 작업 상태를 표시하는 값이 있을 때까지 (예 : 5 개 중 3 개 작업 완료)
작업 그룹에 대한 실행 요청 및 완료 대기
POST /tasks/groups
실행할 작업 그룹과 함께
GET /tasks/groups/group/[groupId]?awaitCompletion=true
완료를 나타내는 결과로 응답 할 때까지 (시간 종료 가능성이 있으므로 루프를 반복해야하는 이유)