MoyaX 0.0.8

MoyaX 0.0.8

测试已测试
语言 SwiftSwift
许可证 MIT
发布上次发布2016年5月
SPM支持 SPM

Jasl 维护。



MoyaX 0.0.8

MoyaX - Moya 的分支

中文版本介绍

MoyaX 的所有功能都已冻结,它还需要更多测试、文档和代码审查,请协助!

你是一位聪明开发者。你很可能使用 Alamofire 来抽象化对 NSURLSession 的访问以及你并不是特别关心的所有那些糟糕的细节。但然后,像许多聪明开发者一样,你编写了一些临时的网络抽象层。它们可能被称为“APIManager”或“NetworkModel”,但最终都会以失败告终。

所以 Moya 的基本思想是,我们想要一些足够的网络抽象层,可以充分封装直接调用 Alamofire。它应该足够简单,以便常用的功能易于实现,同时也应该足够全面,以便复杂的任务也易于实现。

此外,MoyaX 将测试存根视为一等公民,因此单元测试超级简单。

MoyaX 最初是 Moya 的分支,但随着许多重构,MoyaX 与 Moya 有很大不同,包括:

  • 目标不严格使用 enum
  • 支持 MultipartFormData 上传
  • 为了高级使用,公开 Alamofire 的 RequestResponse
  • 更强大的存根请求

但 MoyaX 认为功能性支持和响应式支持应成为扩展,因此它们目前已被移除,直到 MoyaX 稳定。

示例项目

Example 目录中有一个示例项目。享受编程乐趣!

要求

  • iOS 8.0+ / Mac OS X 10.9+ / tvOS 9.0+ / watchOS 2.0+
  • Xcode 7.3+

安装

基本用法

将 Web API 抽象成一个目标

使用 MoyaX 从定义一个目标开始 - 它可能是一个需要符合 Target 协议的 structclassenum。然后,应用程序的其余部分只与这些目标处理有关。一个目标看起来像

// This struct defined Github show user API
struct GithubShowUser: Target {
  // The username which should requesting
  let name: String

  // Constructor
  init(name: String) {
    self.name = name
  }

  // Required
  var baseURL: NSURL {
    return NSURL(string: "https://api.github.com")!
  }

  // Required
  var path: String {
    return "/users/\(name)"
  }

  // Optional, default is .GET
  var method: HTTPMethod {
    return .GET
  }

  // Optional, default is empty
  var headerFields: [String: String] {
    return [:]
  }

  // Optional, default is empty
  var parameters: [String: AnyObject] {
    return [:]
  }

  // Optional, default is .URL, means submitting parameters using `x-www-form-urlencoded`
  var parameterEncoding: ParameterEncoding {
    return .URL
  }
}

发起请求

你应该通过 MoyaXProvider 访问目标。

// Initialize a MoyaXProvider
let provider = MoyaXProvider()

// Request an API
provider.request(GithubShowUser(name: "jasl")) { response in
  switch response {

  // The server has response, 4xx and 5xx goes here too
  case let .Response(response):
    let data = response.data
    let statusCode = response.statusCode
    // Handle success here

  // Network failure (connectivity or timeout), the request had cancelled or other unexpected errors goes here
  case let .Incomplete(error):
    // error is an enum
    // Handle error here
  }
}

上传 MultipartFormData

上传 MultipartFormData 简单且高效。

struct UploadingTarget: Target {
  let baseURL = NSURL(string: "https://httpbin.org")!
  let path = "post"

  // Remember, .GET doesn't support uploading.
  let method = HTTPMethod.POST

  // Encoding parameters by multipart/form-data
  let parameterEncoding = ParameterEncoding.MultipartFormData

  var parameters: [String: AnyObject] {
    return [
      // MoyaX provides some placeholders for MultipartFormData
      "photo1": FileForMultipartFormData(fileURL: photoFileURL, filename: 'photo1.jpg', mimeType: 'image/jpeg'),
      "photo2": DataForMultipartFormData(data: photoData, filename: 'photo2.jpg', mimeType: 'image/jpeg')
  }
}

// Request a MultipartFormData target is no different with others.
provider.request(UploadingTarget()) { response in
  // Handle response
}

许可证

MoyaX 采用 MIT 协议发布。更多详细信息请查看 LICENSE 文件。