RxRestler 1.1.2

RxRestler 1.1.2

Bartłomiej Świerad 维护。



 
依赖
RestlerCore~> 1.1
RxSwift~> 6.0
 

RxRestler 1.1.2

  • 作者:
  • Bartłomiej Świerad

Restler

Package Build Status Example App Build Status Coverage Status

Restler 框架被构建为利用最新的 Swift 版本的功能。其灵感来源于用于用 Swift 构建服务器端的 Vapor 库。我们所喜爱的是函数式编程,因此您可以只通过调用一些链式函数来构建您所需请求。框架的主要目标是通过提供最简单、最快的 API 请求接口来提高效率。

内容列表

  1. 文档
  2. 安装
  3. 用法
  4. 贡献

文档

我们认为 README 不是完整的文档的好地方,因此我们决定在框架仓库内的文件夹中生成它。完整的文档可以在 文档 文件夹中找到。如果您正在寻找特定协议或类的描述,我们在此处放置了最重要的符号列表。

Restler

RestlerType - 这是当需要进行模拟或使用 Restler 的实例 时应该使用的核心协议。

请求构建器

所有这些协议都在一个文件中定义:RestlerRequestBuilderType

请求

Restler.Request - 由 Restler 提供的所有请求类型的泛型类。

错误

  • Restler.Error - Restler 返回的错误。
  • Restler.ErrorType - Restler 能够自行解码的类型。每个不同类型都会是一个 unknownError

错误解析器

安装

那里没有更简单的事情——如果你使用了一个,只需将其框架添加到 Swift 包管理器 依赖关系。

否则你还可以使用 CocoaPods。如果你使用了一个,只需将其添加到你的 Podfile 文件中。

...
pod 'Restler/Core'
...

重要:请用 /Core 指定它!(从 v1.0 开始更改)并在控制台中调用。

pod install

将框架导入到项目中

import RestlerCore

然后调用它!

用法示例

错误解析器

如果你不想在每次请求失败时解析相同的错误,只需将错误直接添加到 Restler 对象的错误解析器。

restler.errorParser.decode(ErrorToDecodeOnFailure.self)

如果你不再想对其进行解码,只需停止解码即可。

restler.errorParser.stopDecoding(ErrorToDecodeOnFailure.self)

头部

设置头部值非常简单,只需将其作为一个字典即可。

restler.header = [
  .contentType: "application/json",
  .cacheControl: "none",
  "customKey": "value"
]
restler.header[.cacheControl] = nil

如果你在“授权”键中使用基本认证,只需将用户名和密码提供给头部即可。

restler.header.setBasicAuthentication(username: "me", password: "password")

Restler 调用

GET

Restler(baseURL: myBaseURL)
  .get(Endpoint.myProfile) // 1
  .query(anEncodableQueryObject) // 2
  .failureDecode(ErrorToDecodeOnFailure.self) // 3
  .setInHeader("myNewTemporaryToken", forKey: "token") // 4
  .receive(on: .main) // 5
  .decode(Profile.self) // 6
  // 7

  .subscribe(
    onSuccess: { profile in // 8
      updateProfile(with: profile)
    },
    onCompletion: { _ in // 9
      hideLoadingIndicator()
  })
  1. 对指定的端点执行 GET 请求。
  2. 编码对象并将其放入 GET 请求的查询中。
  3. 如果将发生错误,错误解析器将尝试解码指定的类型。
  4. 仅为此请求在标题中设置给定键的指定值。
  5. 将完成处理器的调用调度队列设置为主队列。
  6. 在响应成功时解码配置文件对象。如果不是可选的,可以调用失败处理程序。
  7. 从此时起,我们在处理请求而不是请求构建器。
  8. 如果Restler成功完成请求,将调用该处理程序。
  9. 无论结果如何,完成请求时都会调用该处理程序。

POST

Restler(baseURL: myBaseURL)
  .post(Endpoint.myProfile) // 1
  .body(anEncodableQueryObject) // 2
  .failureDecode(ErrorToDecodeOnFailure.self)
  .decode(Profile.self)

  .subscribe(
    onFailure: { error in // 3
      print("\(error)")
    },
    onCompletion: { _ in
      hideLoadingIndicator()
  })
  1. 向给定的端点发送POST请求。
  2. 编码对象并将其置于请求体中。如果所选请求方法不支持,则忽略。
  3. 如果请求失败,将调用该处理程序。

其他

任何其他方法调用都与这两个非常相似,但如果你有疑问,只需创建一个问题即可。

Restler + Combine

  • Restler方法
Restler(baseURL: myBaseURL)
  .get("/profile") // 1
  .decode(Profile.self) // 2
  .publisher // 3
  .catch { _ in Empty() } // 4
  .assign(to: \.profile, on: self) // 5
  .store(in: &subscriptions) // 6
  1. 对指定的端点执行 GET 请求。
  2. 解码Profile对象。
  3. 将请求对象转换为发布者,以便在您的代码中使用Combine。
  4. 处理抛出的错误
  5. 将发布者中的每个元素分配给对象上的一个属性。
  6. 将此类型擦除可取消的实例存储在指定的集合中。
  • 更多Combine方法
Restler(baseURL: myBaseURL)
  .get(Endpoint.myProfile) // 1
  .query(anEncodableQueryObject) // 2
  .publisher()? // 3
  .receive(on: DispatchQueue.main) // 4
  .map(\.data) // 5
  .decode(type: Profile.self, decoder: JSONDecoder()) // 6
  .catch { _ in Empty() } // 7
  .assign(to: \.profile, on: self) // 8
  .store(in: &subscriptions) // 9
  1. 对指定的端点执行 GET 请求。
  2. 编码对象并将其放入 GET 请求的查询中。
  3. 构建请求并返回用于Combine支持的发布者。
  4. 指定从发布者接收元素的调度器。在此例中为主队列。
  5. DataTaskPublisher获取数据对象。
  6. 解码Profile对象。
  7. 处理错误
  8. 将发布者中的每个元素分配给对象上的一个属性。
  9. 将此类型擦除可取消的实例存储在指定的集合中。

Restler + RxSwift

首先,您需要将RxRestler添加到您的目标,您可以在SPM中轻松完成此操作。在CocoaPods中,您应该在Podfile中添加

pod `Restler/Rx`

然后,在每个需要的文件中导入import RxRestler

Restler(baseURL: myBaseURL)
  .get(Endpoint.myProfile)
  .query(anEncodableQueryObject)
  .receive(on: .main) // 1
  .decode(Profile.self) // 2
  .rx // 3
  .subscribe( // 4
    onSuccess: { print("This is my profile:", $0) },
    onError: { print("This is an error:", $0) })
  .disposed(by: bag) // 5
  1. 即使使用 RxSwift(设置此属性可能会在收到响应和处理它之间引入一些轻微的延迟,但处理程序仍将在提供的调度器上调用)提供的队列上也会调用订阅处理程序。
  2. 在成功响应后将类型解码为某些类型 - Void、Data 或某些自定义对象。
  3. 将请求移至 Rx 使用。在这种情况下,返回 Single
  4. 在这里,我们调用已存在的 RxSwift 函数。
  5. 请记住将 Disposable 添加到 DisposeBag 中。如果 bag 脱初始化,网络任务将自动取消。

贡献

如果您想为该框架做出贡献,只需将您的拉取请求放在此处。

如果您发现了任何错误,请将其记录在问题中。

如果您想要求 Restler 做其他事情,请创建带有功能请求的问题。

配置

  1. 克隆项目并在终端中打开项目的文件夹。
  2. 运行配置脚本: ./Scripts/configure.sh
  3. 在文件夹 Restler-Example/Restler-Example/Configuration 中填写配置文件,文件名为 Debug.xcconfig,并包含所需信息。
  4. 在文件夹 Restler-Example 中打开项目。您可以从终端做到这一点: open Restler-Example/Restler-Example.xcodeproj
  5. 运行测试以确保一切正常工作。

代码风格检查

在将更改推送到仓库之前,运行 ./Scripts/pod_lib_lint.rb Restler.podspec 命令以检查 podspec。

发布

  1. 打开项目根目录。
  2. cd Scripts/releaseTool
  3. swift run ReleaseTool release ../..

依赖

宝石