내 응용 프로그램이 JSON-RPC 프로토콜을 사용하여 백엔드와 통신합니다. 기본적으로 개체를 가져 와서 핵심 데이터에 직접 저장하는 것입니다. 여러 종류의 엔티티가 있습니다. 예를 들어 보겠습니다. 이벤트 및 팟 캐스트. 두 엔티티에 대한 POST 요청을 사용하여 동일한 끝점에서 API를 실행하여 가져 오는 것입니다. 유일한 변화는 PARAMS 것을 : 이벤트에 대한요청 매개 변수에 따라 리소스 매핑
: 팟 캐스트를 들어
{
id = 0;
jsonrpc = "2.0";
method = "Events.Event.list";
params = {
location = {
type = token;
value = haHssQWR0V8d;
};
sessionId = v1oCLGlfxIvqYxhaHssQWR0V8dkFeS1JUqlF;
week = "2014_42";
};
}
: 나는 현재와 같은 모든 엔티티 매핑에 응답 디스크립터를 만드는 오전
{
id = 1;
jsonrpc = "2.0";
method = "Podcasts.Podcast.list";
params = {
sessionId = v1oCLGlfxIvqYxhaHssQWR0V8dkFeS1JUqlF;
};
}
이.
+ (void)configureAllObjectsMapping
{
[self mapEvent];
[self mapPodcast];
}
+ (RKEntityMapping *)mapEvent
{
if (_eventMapping) {
return _eventMapping;
}
_eventMapping = [self mappingForClass:[Event class]];
_eventMapping.identificationAttributes = @[CoreDataPrimaryKey];
[_eventMapping addAttributeMappingsFromDictionary:@{
@"token":@"token",
@"name":@"name",
@"urlWeb":@"urlWeb",
@"urlImage":@"urlImage",
@"startsAt":@"startsAt",
@"endsAt":@"endsAt",
@"costs":@"costs",
@"description":@"desc",
@"genres":@"genres",
@"artists.isSecret":@"hasSecretArtist",
@"hasGuestlist":@"hasGuestlist",
@"countGoings":@"countGoings"
}];
[_eventMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"venue"
toKeyPath:@"venue"
withMapping:[self mapVenue]]];
[_eventMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"artists.data"
toKeyPath:@"artists"
withMapping:[self mapArtist]]];
RKResponseDescriptor *list = [RKResponseDescriptor responseDescriptorWithMapping:_eventMapping
method:RKRequestMethodPOST
pathPattern:nil
keyPath:@"result.data"
statusCodes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(RKStatusCodeClassSuccessful, 104)]];
[[APIManager sharedInstance].manager addResponseDescriptor:list];
return _eventMapping;
}
+ (RKEntityMapping *)mapPodcast
{
if (_podcastMapping) {
return _podcastMapping;
}
_podcastMapping = [self mappingForClass:[Podcast class]];
_podcastMapping.identificationAttributes = @[CoreDataPrimaryKey];
[_podcastMapping addAttributeMappingsFromDictionary:@{
@"token":@"token",
@"name":@"name",
@"urlWeb":@"urlWeb",
@"urlImage":@"urlImage",
@"description":@"desc",
@"duration":@"duration",
@"playCount":@"playCount"
}];
RKResponseDescriptor *list = [RKResponseDescriptor responseDescriptorWithMapping:_podcastMapping
method:RKRequestMethodPOST
pathPattern:nil
keyPath:@"result.data"
statusCodes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(RKStatusCodeClassSuccessful, 104)]];
[[APIManager sharedInstance].manager addResponseDescriptor:list];
return _podcastMapping;
}
문제는 pathPattern
이 전무이기 때문에 팟 캐스트 및 이벤트 엔티티 모두에 대한 응답 디스크립터가 동일한 지입니다.
따라서 내가 백엔드에서받는 모든 것이 현재 mapPodcast
방법이 mapEvent
방법 후 호출되기 때문에 팟 캐스트로 간주됩니다.
두 응답을 구별하고 각 요청의 응답을 올바른 엔티티에 매핑하는 방법을 아는 사람이 있습니까?
UPDATE :
이벤트
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"count": 1,
"data": [
{
"token": "YAXDMJG17GRO",
"event_name": "Klubnacht | Fachwerk Nacht",
...
}
]
}
}
팟 캐스트
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"count": 1,
"data": [
{
"token": "G17GROYAXDMJ",
"podcast_name": "Podcast #19",
...
}
]
}
}
: 이것은 내 자원을 얻을 응답의 종류
응답
따라서 매개 변수 이름을 제외하고 이벤트를 구분할 수있는 이벤트는 없습니다.
데이터 유형을 알려주는 응답이 있습니까? – Wain
정말로 (제 편집 참조). 다른 응답을'data' 배열의 일부 매개 변수의 이름과 구별 할 수있는 유일한 것입니다. –