iOS平台调用后台接口的正确姿势

前言

做iOS开发,除非你做的是单机应用,否则一定避免不了接口调用,也就是所谓的API调用。

而对于这方面,每个公司定义接口的格式不尽相同,从而导致我们的代码没法达到通用。

甚至你接私活的话,更会遇到五花八门的接口格式。那么有没有一种通用的方式来处理这些不通用的格式呢?

我尝试从变化的接口格式中找到不变的东西,把这些不变的东西进行可配置,从而形成以不变应万变的接口调用方式。

这些不变的东西,包括如下几种:

  • 错误码
  • 错误消息
  • 业务数据

而对于错误码又可以分如下几类:

  • 成功
  • 失败
  • token失效

基于以上的分析,形成了一个开源库,希望能在一定程度上方便大家的开发。
开源地址:https://github.com/wochen85/FKApiInvoker

下面进行使用的详细说明:

FKApiInvoker

iOS 平台网络接口调用封装

安装

pod 'FKApiInvoker'

使用

1. 初始化配置,可以放在Appdelegate的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions方法中,或者其他你认为合适的地方,

假设后台返回的json格式如下:

{"code":0,
"msg":"成功",
"data":{"name":"CHAT",
        "age":18}}

其中 code是错误码(0代表处理成功,127代表token过期),msg是提示消息,data 是具体的业务数据

那么做如下配置:

FKApiInvokerConfig* config = [[FKApiInvokerConfig alloc] initWithBaseUrls:@[@"http://www.httpbin.org",@"http://www.httpbin.org",@"http://www.httpbin.org",@"http://www.httpbin.org"] commonHeaders:@{@"test": @"test"} respCodeKey:@"code" respMsgKey:@"msg" respDataKey:@"data" successCode:0 tokenExpiredCode:127];
    [[FKApiInvoker sharedInvoker] configInvoker:config];
    [FKApiInvoker sharedInvoker].tokenExpiredBlk = ^{
        //token失效,跳转登录页面
    };

2. 调用后台API

[FKApiInvoker fire:@"post" path:@"/personinfo/login" param:nil headers:headers body:body responseModelClass:[LoginResp class] success:^(LoginResp* model) {
        //成功处理
    } failure:^(NSError *error) {
        //失败处理
    }];

3. 使用mock数据

[FKApiInvoker fireWithMockData:mockData method:@"post" path:@"/personinfo/login" param:nil headers:headers body:body responseModelClass:[LoginResp class] success:^(LoginResp* model) {
        //成功处理
    } failure:^(NSError *error) {
        //失败处理
    }];

其他情况

1. 后台返回的业务数据和错误码、错误消息平级:

{"code":0,
    "msg":"成功",
    "name":"CHAT",
    "age":18}

则在初始化配置的时候改成这种:

FKApiInvokerConfig* config = [[FKApiInvokerConfig alloc] initWithBaseUrls:@[@"http://www.httpbin.org",@"http://www.httpbin.org",@"http://www.httpbin.org",@"http://www.httpbin.org"] commonHeaders:@{@"test": @"test"} respCodeKey:@"code" respMsgKey:@"msg" respDataKey:nil successCode:0 tokenExpiredCode:127];
    [[FKApiInvoker sharedInvoker] configInvoker:config];
    [FKApiInvoker sharedInvoker].tokenExpiredBlk = ^{
        //token失效,跳转登录页面
    };

即respDataKey参数传nil

2. 如果通用头在初始化配置之后可能发生变化,这种情况常见于用户登录之后,通用头里面需要加入形如token的字段

那么调用如下方法:

[[FKApiInvoker sharedInvoker] configCommonHeaders:@{@"token": @"token string"}];

3. 需要做其他更加灵活的json格式的http请求?

可以直接使用我写的另一个库:
JsonModelHttp

事实上FKApiInvoker底层也是依赖的JsonModelHttp.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,779评论 0 15
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,097评论 6 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,914评论 1 32
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 9,513评论 0 5
  • 一、iOS 直播聊天室 Demo 说明 1、源码结构 2、AppDelegate 在 AppDelegate 中初...
    ajiao焦阅读 7,972评论 2 7

友情链接更多精彩内容