2013-08-20 2 views
0

질문이 있습니다. 누군가가 의사적인 예를 들어 줄 수 있다면 어떻게 처리할까요? 감사하겠습니다. 리소스 변경 사항을 어떻게 처리합니까?

이의 내 응용 프로그램은 당신이

/clients/{clientId}/contactsSummary 
/locations/{locationId}/contactsSummary 

에 대해 GET을 실행할 수있는 URL을 가지고 있는데이 현금 인출을 수행 할한다고 가정 해 봅시다. 내가 POST/PATCH을 할 경우 지금/캐시가 무효화됩니까 방법

/contacts/{contactId} 

에 삭제합니다. 분명히 연락처의 변경, 생성 또는 삭제로 인해 처음 두 URL이 캐시 된 버전을 반환하게되는데 이는 잘못된 것입니다. 이것을 처리하는 메커니즘은 무엇입니까?

답변

0

프론트 엔드가 최신 정보를 절대적으로 필요로하는 경우에는 캐시하지 마십시오. 그렇지 않으면 캐시 된 모든 항목에 만료 시간을 추가하십시오.이 시간은 검색되는 순간부터 1 초에서 1 시간 (또는 그 이상) 일 수 있습니다.

그러나 일관성 문제를 처리해야 할 수도 있습니다. 예를 들어 만료 된 연락처에 대한 만료되지 않은 참조가있을 수 있습니다.

cache은 튜플의 URL (expires,data)에 대한 사전이라고 가정합니다. URL을 검색하는 의사 코드는 다음과 같습니다.

cacheItem= cache[ULR] 
if(cacheItem == null || cacheItem.expires < currentTime) 
    cacheItem= (currentTime + 1_hour , http_get(URL)) 
    cache[ULR]= cacheItem 
return cacheItem.data 
0

클라이언트는 자원의 현재 표현을 검색할지 여부를 결정합니다. "조건부 획득"으로 알려진 것을 사용하십시오.

는 "조건부 GET"로 GET 방식 변경의 의미는 상기 요청 메시지는 IF-변성 때문에, IF-미 변성-때문에, 만약 매치, IF-없음 매치, 또는의 If를 포함한다면 범위 헤더 필드. 조건부 GET 메소드는 조건부 헤더 필드 (들)에 의해 기술 된 상황 하에서 만 엔티티가 전송되도록 요구한다. 조건부 GET 메서드는 여러 요청을 필요로하지 않고 캐시 된 엔터티를 새로 고치거나 이미 클라이언트에서 보유한 데이터를 전송하지 않고 불필요한 네트워크 사용을 줄이기위한 것입니다.

(제 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html 9.3)이 작업을 수행하는 방법

? C은 클라이언트이고 S은 서버입니다.

C

GET /path/to/resource 

S

200 OK 
ETag: foo 
Last-Modified: Tue, 15 Nov 1994 12:45:00 GMT 

C

클라이언트 PUT는 수정 된 버전이야.

PUT /path/to/resource 
If-Match: foo 

S

클라이언트는 이렇게 자원에 PUT은 OK입니다 현재 버전을했다.

200 OK 
ETag: bar 
Last-Modified: Tue, 15 Nov 1994 12:46:00 GMT 

C

클라이언트 PUT는 modiefied 버전이야하지만 그 동안 자원이 변경되었습니다와 ETag: bar 더 이상 일치하지 않습니다.

PUT /path/to/resource 
If-Match: bar 

S

412 Precondition Failed 

C

클라이언트 GET의 자원의 현재 버전.

GET /PATH/to/resource 

S

200 OK 
ETag: baz 
Last-Modified: Tue, 15 Nov 1994 12:47:00 GMT 

C

이제 다시 클라이언트 자원 PUT있다.

PUT /path/to/resource 
If-Match: ba7 

S 자세한 답변을

200 OK 
ETag: qux 
Last-Modified: Tue, 15 Nov 1994 12:48:00 GMT 
+0

감사합니다,하지만 그건 내가 묻고 있었는지 사실이 아니다. 우리가 하나의 URL에 대해 이야기 할 때 의미가 있지만, 예를 들어, 엔티티가 수정되고 있지만 엔티티의 일부 속성은 다른 URL에 리소스를 만드는 데 사용됩니다. 말이 돼? – epitka

관련 문제