FDRequestClient 1.0.0

FDRequestClient 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Reid Main 维护。



概述

任何在 Objective-C 中使用过 RESTful 服务的人都清楚,与之相关联有很大的样板代码。即使是随着 NSURLSession 的出现,人们仍然需要编写大量类似的代码来从他们的网络服务解析数据。

该项目的目的就是将这些样板代码归纳到单个类中,使您可以将网络请求的所有信息包装成一个单个对象,并使用基于块(block-based)的 API 来加载它。

架构

该项目的主要四个类是 FDHTTPRequest,FDRequestClient,FDRequestClientTask 和 FDURLResponse。

FDHTTPRequest

FDHTTPRequest 是一个简单的 NSURLRequest 包装对象。它处理了许多您在尝试创建 HTTP NSURLRequest 时需要编写的常见代码,例如设置头字段、设置查询参数、设置消息体、将消息体转换为 JSON 并设置相应的头字段等。

FDRequestClient

FDRequestClient 是本项目的核心。它接受 FDHTTPRequest 或 NSURLRequest,提供了一系列用于所有可能发生在请求加载期间的回调的块。

FDRequestClientTask

FDRequestClientTask 是 NSURLSessionTask 的包装类。它在请求加载过程中处理收到的所有数据,并提供了一个接口来开始、停止和暂停请求的加载。它还有一个基于块的 API,用于在任务完成加载时通知您。

FDURLResponse

FDURLResponse 是 NSURLResponse 的包装类。它简化了对您通常在请求结束加载时关注的某些常用信息的访问。

安装

FDRequestClient 支持两种安装方法。两种方法都假设您的 Xcode 项目使用模块。

1. 子项目

  1. 将 "FDRequestClient" 项目添加到 "Framework Project" 目录中作为子项目,或者将其添加到您的工作区。
  2. 将 "FDRequestClient (iOS/Mac)" 添加到您的目标的目标依赖项部分。
  3. 在任何将使用 FDRequestClient 的文件中使用 "@import FDRequestClient"。

示例

该项目附带了iOS示例项目,展示了如何使用iOS账户查询Twitter API和GitHub API。

以下是快速展示如何构建针对某个简单HTTP请求的示例。

NSURL *url = [NSURL URLWithString: @"https://api.twitch.tv/kraken/search/games"];

FDHTTPRequest *httpRequest = [[FDHTTPRequest alloc] 
    initWithURL: url];
[httpRequest setValue: @"Monster Hunter" 
    forParameter: @"query"];
[httpRequest setValue: @"suggest" 
    forParameter: @"type"];
[httpRequest setValue: @"true" 
    forParameter: @"live"];

FDRequestClient *requestClient = [FDRequestClient new];
[requestClient loadHTTPRequest: httpRequest 
    authorizationBlock: nil 
    progressBlock: ^(float uploadProgress, float dowloadProgress)
        {
            NSLog(@"Downloading: %.2f%%", dowloadProgress * 100);
        } 
    dataParserBlock: nil 
    transformBlock: ^id(id object)
        {
            id firstResult = nil;

            if ([object isKindOfClass: [NSDictionary class]] == YES)
            {
                firstResult = object[@"games"][0];
            }

            return firstResult;
        } 
    completionBlock: ^(FDURLResponse *urlResponse)
        {
            NSLog(@"First Result:\t%@", urlResponse.content);
        }];