2014-09-10 3 views
0

SQL 쿼리를 실행하고 여러 열 중 하나로 정렬 된 웹 서비스가 있고 요청 된 단일 페이지를 반환합니다 (건너 뛰기 제한 N). 그 앞에있는 UI는 '더 많은로드'패턴을 따르고로드 된 모든 페이지를 하나의보기에 누적합니다.부실 페이지 매김에 대한 HTTP 응답 코드

문제는 새롭고 삭제 된 레코드입니다. 언제든지 발생할 수 있으므로 '추가로드'의 결과가 잘못 정렬되고 사용되는 정렬에 따라 표시되어야하는 새 레코드가 보이지 않게됩니다. 프론트 엔드의 타이머에 대한 자동 새로 고침 외에도 RESTful 요청 및 응답 형식에 타임 스탬프 필드를 추가하여 webapp이 '더 많은로드'호출에서보기가 완전히 다시로드되어야 함을 감지 할 수 있도록 할 것입니다.

제 질문은이 신호에 가장 적합한 HTTP 상태 코드는 무엇입니까? reviewing the codes에 정확하게 맞지 않습니다. 내가 '페이지 1'에 대한 링크가있는 302 Found을 사용하는 것을 생각했지만 리디렉션의 원하지 않는 캐싱이 발생할 수 있는지 궁금합니다. 나는 또한 400 Bad Request을 생각했지만, 요청에 실제로 아무런 문제가 없었습니다. 데이터를 다시로드해야합니다.

페이지는 요청 된 페이지가 JSON 본문에 제공된 POST /path 전화에서 제공됩니다.

나는 완벽한 순수 주체가 아니기 때문에 캐싱이나 다른 부작용없이 작동하게하는 것은 허용되지만 가능한 한 REST 원칙을 따르고 싶습니다. 이 캐싱이나 다른 부작용없이 작동 할 것

답변

1

아무것도 명시 적으로 등을 표시하지 않는 POST에

응답이 are not cacheable를 요청 허용됩니다. 따라서 상태 코드, 응답 헤더 및 응답 엔터티의 조합을 사용하여 "다시로드하십시오"메시지를 클라이언트에 전달할 수 있습니다.

conditional requests을 사용할 수 있습니다. If-Unmodified-Since 헤더에 고객의 타임 스탬프를 포함합니다. 클라이언트가 부실한 경우 412 Precondition Failed으로 응답하십시오. 클라이언트는 다시로드하는 방법을 알아야합니다.

당신이 때문에 307을 받으면, /path에 페이지 매김을 인코딩 할 경우에만, XMLHttpRequest를 투명하게 (새로운 Location에 동일한 POST 요청을 다시 제출합니다 (난 당신이 여기에 AJAX를하고있는 있으리라 믿고있어) 307 Temporary Redirect을 시도 할 수 있지만, 적어도 내 Chromium이하는 일입니다.) 실제 페이지 JSON에는 커버하는 범위에 대한 메타 정보가 포함되어야하므로 클라이언트는 추가하지 않고 행을 대체해야한다는 것을 알고 있습니다.

+0

'If-Unmodified-Since'와 코드 412가 잘 맞습니다. – wberry

관련 문제