MoyaSugar 1.3.3

MoyaSugar 1.3.3

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2020年4月
SPM支持 SPM

Suyeol Jeon 维护。



MoyaSugar 1.3.3

  • Suyeol Jeon

MoyaSugar

Swift CI CocoaPods

Moya 的语法糖。

为什么这样使用?

Moya 是一个优雅的网络抽象层,使用 enum 抽象 API 端点。然而,当应用程序变大时,它将变得庞大。每当您添加一个端点时,您至少需要在 5 个地方编写代码:枚举情况、methodpathparametersparameterEncoding 属性。 这会让您一次又一次地滚动查看代码。此外,如果您想设置不同的 HTTP 头字段,您需要自定义 MoyaProviderendpointClosure

如果您和我一样懒惰,MoyaSugar 非常适合您。

一瞥

忘记 methodpathparametersparameterEncodingendpointClosure。改用 routeparamshttpHeaderFields

extension MyService: SugarTargetType {
  var route: Route {
    return .get("/me")
  }

  var params: Parameters? {
    return JSONEncoding() => [
      "username": "devxoul",
      "password": "****",
    ]
  }

  var headers: [String: String]? {
    return ["Accept": "application/json"]
  }
}

使用 MoyaSugarProvider 而不是 MoyaProvider

let provider = MoyaSugarProvider<MyService>()
let provider = RxMoyaSugarProvider<MyService>() // If you're using Moya/RxSwift

完整示例

import Moya
import Moyasugar

enum GitHubAPI {
  case url(String)
  case userRepos(owner: String)
  case createIssue(owner: String, repo: String, title: String, body: String?)
  case editIssue(owner: String, repo: String, number: Int, title: String?, body: String?)
}

extension GitHubAPI : SugarTargetType {

  /// method + path
  var route: Route {
    switch self {
    case .url(let urlString):
      return .get(urlString)

    case .userRepos(let owner):
      return .get("/users/\(owner)/repos")

    case .createIssue(let owner, let repo, _, _):
      return .post("/repos/\(owner)/\(repo)/issues")

    case .editIssue(let owner, let repo, let number, _, _):
      return .patch("/repos/\(owner)/\(repo)/issues/\(number)")
    }
  }

  // override default url building behavior
  var url: URL {
    switch self {
    case .url(let urlString):
      return URL(string: urlString)!
    default:
      return self.defaultURL
    }
  }

  /// encoding + parameters
  var params: Parameters? {
    switch self {
    case .url:
      return nil

    case .userRepos:
      return nil

    case .createIssue(_, _, let title, let body):
      return JSONEncoding() => [
        "title": title,
        "body": body,
      ]

    case .editIssue(_, _, _, let title, let body):
      // Use `URLEncoding()` as default when not specified
      return [
        "title": title,
        "body": body,
      ]
    }
  }

  var headers: [String: String]? {
    return [
      "Accept": "application/json"
    ]
  }

}

APIs

  • 🔗 protocol SugarTargetType

    - extension GitHubAPI: TargetType
    + extension GitHubAPI: SugarTargetType
  • 🔗 var route: Route

    返回包含HTTP方法和URL路径信息的Route

    - var method: Method { get }
    - var path: String { get }
    + var route: Route { get }

    示例

    var route: Route {
      return .get("/me")
    }
  • 🔗 var url: URL

    返回请求URL。默认返回defaultURL,它是baseURLpath的组合。实现此属性以返回自定义URL。见#6获取详细信息。

  • 🔗 var params: Parameters?

    返回包含参数编码和值的Parameters

    - var parameters: [String: Any]? { get }
    + var params: Parameters? { get }

    示例

    var params: Parameters? {
      return JSONEncoding() => [
        "username": "devxoul",
        "password": "****",
      ]
    }

    注意:如果使用endpointClosure参数初始化MoyaSugarProvider,则将使用endpointClosure的HTTP头字段。这是如何在endpointClosure中扩展目标的HTTP头字段的方法

    let endpointClosure: (GitHubAPI) -> Endpoint<GitHubAPI> = { target in
      let defaultEndpoint = MoyaProvider.defaultEndpointMapping(for: target)
      return defaultEndpoint
        .adding(newHTTPHeaderFields: ["Authorization": "MySecretToken"])
    }

要求

Moya相同

安装

  • 使用CocoaPods:

    pod 'MoyaSugar'
    pod 'MoyaSugar/RxSwift' # Use with RxSwift

MoyaSugar当前不支持Carthage。

贡献

$ TEST=1 swift package generate-xcodeproj
$ open MoyaSugar.xcodeproj

许可证

MoyaSugar 使用 MIT 许可证。查看 LICENSE 文件获取更多信息。