我们正在使用 AFNetworking 从我们的移动应用程序发出版本化 API 请求。
为了针对我们 API 的特定版本,我们的应用程序会发送一个特殊的 Accept Header。
我已经组织了我的代码库,以便每个资源(用户、会话、图像等)都有自己的 AFHTTPClient,它在初始化时设置 Accept 标头。
+ (UsersAPIClient *)sharedClient
{
// removed singleton setup code for brevity
// here's where my version gets set for all requests pertaining to Users
__sharedClient = [[UsersAPIClient alloc] initWithBaseURL:url andVersion:2];
return __sharedClient;
}
我是这样设置的,这样每个请求(创建用户、编辑用户、获取用户)都不必担心要调用哪个版本;这在创建特定 APIClient 时已经完成。
该系统运行良好,但我只是质疑我是否应该这样做?我们有大约 9 个对象,因此在 BaseAPIClient 类之上有 18 个文件(.h、.m),一切都继承自。
是否应该将我的所有网络代码都放在一个文件中,并且每个请求在发出请求之前都设置适当的 Accept Header?通过加载 9 个不同的客户端类而不是仅加载 1 个巨型客户端类,是否存在显着的内存开销?在设计这个系统时,我认为只根据需要和按需创建 APIClients 是有利的。如果用户打开应用程序并且从未登录,那么我永远不需要加载负责创建会话的代码。如果我所有的网络代码都塞在一个文件中,那么当用户第一次执行任何需要 HTTP 请求的操作时,所有网络代码都会立即加载到内存中。