1. 该文档由 @Aevit 提供

6.4.1 使用说明

将框架目录下的 ./SDK/Objective-C/ 目录中的全部代码拷贝到项目里面即可使用。如:[6.4] SDK包(object c版) 由@Aevit 提供 - 图1

  1. 请求方式,可以使用系统的NSURLSession,或第三方的网络请求库等
  2. 这里我们使用第三方的AFNetworking,进行二次封装(https://github.com/AFNetworking/AFNetworking)
  3. 如需使用其他网络请求方式(如官方的NSURLSession),请继承自PhalApiClient,重写request方法即可,可参考AFNPhalApiClient

6.4.2 代码示例

如下是使用的代码场景片段。

首先,我们需要导入SDK包:

  1. #import "AFNPhalApiClient.h"

然后,准备按以下方法实现接口请求即可:

  1. // 待POST的参数
  2. NSDictionary *params = @{@"demo_key_1": @"your_key", @"demo_key_2": @"1.0"};
  3. // 使用AFNPhalApiClient
  4. [[[[[AFNPhalApiClient sharedClient] withHost:@"http://api1.aevit.xyz/"] withService:@"Default.Index"] withParams:params] requestWithFormDataBlock:^(id formData) {
  5. // 如需上传文件(图片等),请参照如下格式
  6. [formData appendPartWithFileData:UIImageJPEGRepresentation([UIImage imageNamed:@"head.JPG"], 1) name:@"file" fileName:@"image.jpg" mimeType:@"image/jpeg"];
  7. } completeBlock:^(id resultObject) {
  8. PALog(@"resultObject: %@", resultObject);
  9. } failureBlock:^(NSError *error) {
  10. PALog(@"error: %@", error);
  11. }];
  12. // 打印url查看
  13. PALog(@"total url: %@", [[AFNPhalApiClient sharedClient] printTotalUrlStr]);

6.4.3 运行效果

运行后,查询log,可以看到:[6.4] SDK包(object c版) 由@Aevit 提供 - 图2

可以注意到,调用完成后,会有接口请求的链接和返回的结果,如:

  1. 2015-10-19 18:28:01.503 PhalApiClientDemo[23161:1199740] total url: http://api1.aevit.xyz/?service=Default.Index&demo_key_2=1.0&demo_key_1=your_key
  2. 2015-10-19 18:28:01.536 PhalApiClientDemo[23161:1199740] resultObject: {
  3. data = {
  4. content = "PHPer\U60a8\U597d\Uff0c\U6b22\U8fce\U4f7f\U7528PhalApi\Uff01";
  5. time = 1445250481;
  6. title = "Hello World!";
  7. version = "1.2.1";
  8. };
  9. msg = "";
  10. ret = 200;
  11. }

6.4.4 扩展你的过滤器和结果解析器

(1)扩展过滤器

当服务端接口需要接口签名验证,或者接口参数加密传送,或者压缩传送时,可以实现此过滤器,以便和服务端操持一致。

当需要扩展时,分两步。首先,需要实现过滤器接口:

  1. @interface MyFilter : PhalApiClientFilter
  2. @end
  3. @implementation PhalApiClientFilter
  4. /**
  5. * 接口过滤器
  6. * 可用于接口签名生成
  7. *
  8. * @param service 接口服务名称
  9. * @param params 接口参数,注意是mutable变量,可以直接修改
  10. */
  11. - (void)filter:(NSString*)service params:(NSMutableDictionary*)params {
  12. // 在此对接口进行过滤
  13. }
  14. @end

然后设置过滤器:

  1. [[[[[[AFNPhalApiClient sharedClient] withHost:@"http://api1.aevit.xyz/"] withService:@"Default.Index"] withParams:params]
  2. withFilter:[MyFilter new]] // filter
  3. requestWithFormDataBlock:^(id formData) {
  4. } completeBlock:^(id resultObject) {
  5. } failureBlock:^(NSError *error) {
  6. }];

(2)扩展结果解析器

当返回的接口结果不是JSON格式时,如XML,请上google搜索“AFNetworking XML”相关资料即可。

原文: https://www.phalapi.net/wikis/6-4.html