2010-01-23 14 views
2

일부 래서 피를 나열한 테이블보기를 상상해보십시오. 사용자가 레서피를 탭 할 때마다 레시피 성분을 나열하는 새로운 테이블 뷰가로드됩니다. , API에 대한 호출이 조리법 재료를 얻을 수 비동기 상태 비 저장 API

NSURLRequest *request = [NSURLRequest requestWithURL:url 
             cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
             timeoutInterval:30]; 

사용자가 조리법에 도청

을 만들어 :

이 정보를 얻으려면, 내가 사용하여 REST API를 호출 비동기입니다. 그러나 새로운 뷰 (재료를 나열 함)에 들어가면 답변을 받기 전에 돌아가서 새 레서피를 선택할 수 있습니다.

이 경우에는 두 가지 답변을 드리겠습니다. 각 요청마다 하나씩. 문제는이 요청에 대한 답변이 무엇인지 알 수 없으며 잘못된 대답으로 잘못된 콘텐츠로 UI를 새로 고칩니다.

이 경우 적절한 접근 방식이 확실하지 않습니다. 나는 각 요청 매개 변수에 답을 포함시키는 것에 대해 생각하고있다. 난 경우에 따라서, 예를 들어, API를 사용하여 특정 용어를 검색하기 위해, 우리는 예를 들어, "foo는"이, 내가 너무 대답 용어를 포함합니다 말 :

요청 :

http://domain.com/api/search?term=foo

대답

{ 
"requestType": "search", 
"term": "foo", 
"result" : "a foo result" 
} 

그것은 각각의 대답에 각 요청 매개 변수를 포함하는 나에게 이상하게 보이지만, 그것이 내가 CREA에있는 유일한 솔루션입니다 비동기 적으로 호출 할 수있는 상태 비 저장 API

¿이 작업을 수행하는 다른 방법이 있습니까?

(답변을받을 때 호출되는 각 요청에 객체를 할당하는 대리자 패턴을 사용하고 있습니다. 문제는 요리법의 예에서 재료 표보기가 재사용되는 시간입니다.).

답변

2

하나의 가능성은 요청에 고유 한 "요청 ID"를 포함시키고 서버가이를 반영하는 것입니다. 그런 다음 서버는 모든 요청 매개 변수 (요청 ID 만)를 반환 할 필요가 없습니다. 클라이언트는 각 요청에 대해 새로운 ID를 생성합니다. 정수를 증가시키는 것과 같은 간단한 것을 사용합니다.

또 다른 가능성은 "취소 가능한 비동기 요청"을 만드는 것입니다. 요청을 발행 할 때 요청을 취소하는 데 사용할 수있는 오브젝트를 리턴하십시오. 대리인이 해고되기 전에 요청이 취소 된 경우 대리인이 해고되지 않도록하십시오. 취소 된 요청에 대한 응답이 나오면 버리십시오. 성분 표에 대해 새 요청을 발행하기 전에 보류중인 요청을 취소합니다 (한 번에 최대 하나의 취소되지 않은 요청을 갖도록 함).

이 방법을 구현하는 한 가지 방법은 2 단계 콜백을 작성하는 것입니다. 인프라에 의해 관리되는 첫 번째 콜백은 요청이 취소되었는지 확인하기 만합니다. 그렇지 않은 경우 두 번째 콜백 (실제로는 위임자)을 호출합니다.

0

일반적인 접근법은 각 레시피에 단일 고유 값 ("키"값)을 할당하고 제안과 마찬가지로 응답으로 다시 전송하는 것입니다. 키 값은 고유하고 짧으면 레서피 이름이 될 수 있지만 더 일반적인 전략은 사용자에게 의미없는 고유 번호 또는 다른 값을 사용하는 것이지만 시간이 지남에 따라 고유하게 레시피를 식별하는 역할을합니다 (예) 이름이 바뀝니다.데이터베이스 용어에서는 비즈니스 키와 대리 키 키의 차이입니다. 둘 다 고유 식별자이지만 비즈니스 키는 사용자 (예 : 이름)에게 의미가 있지만 대리 키는 그렇지 않습니다. 내 추천은 대리 키를 짧게 만들 수 있고 사용자가 신경 쓰지 않기 때문에 변경할 필요가 없기 때문에 대리 키를 사용하는 것이 좋습니다.

웹 서비스 호출에서 매개 변수로 키를 허용하는 경우 클라이언트가 매개 변수를 변경하는지 여부를 알 수 없으므로 키를 웹 서비스 호출의 매개 변수로 사용하는 경우 유효성을 검사하거나 보안이 중요하면 암호화해야합니다.

덧붙여서 나는 클라이언트가 가장 최근에 어떤 요리법을 선택했는지 "알고"있기 때문에 다른 조리법에 대한 응답을 무시할 수 있습니다.

관련 문제