casatwy / CTNetworking

iOS networking API layer
Other
488 stars 104 forks source link

报文处理相关代码优化修改 #20

Closed Vincentzzg closed 5 years ago

Vincentzzg commented 5 years ago

由于CTApiProxy中dataTaskWithRequest返回的数据类型不可知,所以相应的修改了一些方法和参数的类型命名

Vincentzzg commented 5 years ago

这次改的比较多,田大哥看下

2018-09-19 3 10 01

改动的源头在于上图中的位置,走到这里其实已经无法拿到后请求原始的NSData类型的数据了,除非AFHTTPSessionManager的responseSerializer = [AFHTTPResponseSerializer serializer],因为AFHTTPResponseSerializer类型的序列化器没有对数据做类型转换,如果是其他类型的responseSerializer,data都已经相应的被转换成了对应的对象

所以,依次类推,针对不确定的类型,做了一些命名和类型上的修改

casatwy commented 5 years ago

👌

Vincentzzg commented 5 years ago

@casatwy 还有几个问题没能解决 1、下面两处的responseString,严重依赖使用者的转换,有可能为空导致日志cotent为空

// 输出返回数据
        CTURLResponse *CTResponse = [[CTURLResponse alloc] initWithResponseString:result[kCTApiProxyValidateResultKeyResponseString]
                                                                        requestId:requestID
                                                                          request:request
                                                                  responseObject:result[kCTApiProxyValidateResultKeyResponseObject]
                                                                            error:error];

        CTResponse.logString = [CTLogger logDebugInfoWithResponse:(NSHTTPURLResponse *)response
                                                   responseObject:responseObject
                                                   responseString:result[kCTApiProxyValidateResultKeyResponseString]
                                                          request:request
                                                            error:error];

2、还有log部分,不是NSData的类型,我直接把object打印了,感觉有些不太合理

if ([responseObject isKindOfClass:[NSData class]]) {
        [logString appendFormat:@"Raw Response String:\n\t%@\n\n", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]];
    } else {
        [logString appendFormat:@"Raw Response String:\n\t%@\n\n", responseObject];
    }

3、CTURLResponse里面的实现,修改过之后self.content类型也不定,这里的转换是不是也需要改下?

- (NSData *)responseData
{
    if (_responseData == nil) {
        NSError *error = nil;
        _responseData = [NSJSONSerialization dataWithJSONObject:self.content options:0 error:&error];
        if (error) {
            _responseData = [@"" dataUsingEncoding:NSUTF8StringEncoding];
        }
    }
    return _responseData;
}
casatwy commented 5 years ago

1和2我觉得问题不大

3这边我现在各种忙,我周末改一下~

Vincentzzg commented 5 years ago

YearRen commented 5 years ago

感觉我可以安心的用了,感谢两位大神修改:)

Vincentzzg commented 5 years ago

@YearRen 我不是大神,Casa才是。 另外,网络框架是客户端工程中非常重要的框架,使用的话还是建议把框架的代码都看一下,了解具体的实现,以后使用的过程中如果出现了异常和错误,自己就可以有的放矢了。

YearRen commented 5 years ago

感谢。我也是最近准备重构公司的项目,开始研究,我会一点一点跟代码的