casatwy / CTNetworking

iOS networking API layer
Other
488 stars 104 forks source link

这个项目是不是缺少了一些组件? #8

Closed imerakk closed 6 years ago

imerakk commented 6 years ago

我看过PPT了,PPT中提到的组件,例如AIFService,AIFRequestGenerator,我在这个项目中并未找到,作者可以将完整的网络层源码发一份给我么?谢谢O(∩_∩)O

casatwy commented 6 years ago

AIFRequestGenerator和AIFService在这个项目中已经被我拿掉了,因为它并不是一个好的设计,不适用于多App的场景。

但Service的机制和request generator的机制还是有保留的,具体你可以看一下CTAPI_Marvel或CTAPI_AMap

imerakk commented 6 years ago

仔细看了下源码,对我启发还是挺大的,非常感谢分享。 另外有几个疑问 1.第一个是validator做数据验证是要求业务方必须做的,这个为什么要这样设计,有时候并没有参数,或者并不需要进行参数验证,这样是不是增加了业务方的使用成本? 2.这个框架并不支持上传,下载这样的请求,如果要进行扩展的话,似乎并不容易。 3.还有一个代码上的疑问:

- (void)afterPerformSuccessWithResponse:(CTURLResponse *)response
{
    if ((NSInteger)self != (NSInteger)self.interceptor && [self.interceptor respondsToSelector:@selector(manager:afterPerformSuccessWithResponse:)]) {
        [self.interceptor manager:self afterPerformSuccessWithResponse:response];
    }
}

其中的(NSInteger)self != (NSInteger)self.interceptor这行代码意思是manager自己不能成为拦截器吗?为什么这里要做一个NSInteger的类型转换?

casatwy commented 6 years ago

1.1 需要对传入参数做验证的API就应该在validator中写入验证逻辑。不需要做参数验证的API,直接return成功就可以了。而且有些需要登录态的API,也是通过这里进行登陆态判断。然后自动登录,自动继续发送原来的API。这样业务工程师可以无感知地直接调用这种API,而不需要做登陆态判断和登陆窗口的弹出等事情。

1.2 返回数据也需要做验证,有的时候API返回成功,但返回的数据是空数组或者其他不可用的数据,此时进行返回数据验证就能避免很多问题,同时更重要的是针对返回数据的验证能够避免将API成功返回但业务不可用的数据写入缓存。

  1. 这个框架只是用来做API调度的,上传下载每个公司的实现都不一样,而且例如七牛这样的公司直接提供了上传下载的SDK,所以我认为没必要在这里做上。

  2. 这是指针判断,看是不是同一个对象。如果不是同一个对象的话,就多做一个validator是否实现对应方法的判断。manager自己是可以成为拦截器的。

casatwy commented 6 years ago

你问的这些问题我文章下面的评论区都有人问过的,翻墙就能加载评论内容了。

imerakk commented 6 years ago

我本来用的shadowsocks,去年19大被封了,现在也没去弄翻墙的VPN了,没找到合适的🤣,平时基本上StackOverflow就能解决我的问题了,翻墙也翻得少了

imerakk commented 6 years ago

CTAPI_Marvel这个项目跑不起来,pod install之后找不到CTAPI_DemoSuite这个依赖,于是我注释了CTAPI_DemoSuite,然后在你的仓库中把CTAPI_DemoSuite这个项目直接下载下来,加到项目中,然后又找不到CTPagableAPIManager的声明。