Kringle 0.0.5

Kringle 0.0.5

Jeff Kereakoglow维护。



Kringle 0.0.5

  • 作者
  • Jeff Kereakoglow

Kringle

您真的需要Alamofire吗?您会使用所有这些功能吗?您甚至知道它们是什么吗?您只想要下载一些JSON并将其解析为合约然后结束吗?这正是Kringle的用途。

Kringle是我的猫。它也是一个小型且具有偏见(意见化)的网络框架。它是为了简单而设计的,实际上只是对URLSession的一个薄抽象。

特性

  • Promise。 使用Google的Promises框架来提供管理完成处理程序和异步行为的一般合理方式
  • JSON反序列化。 JSON响应数据在后台队列中反序列化为遵循Decodable协议的对象。因此,如果您的大型JSON数据集,您的应用程序不会卡死
  • 自动cookie管理。 如果响应包含带有未来到期日期或根本没有到期日期的Set-Cookie头,则将存储cookie。同样,如果响应包含带有过去到期日期的Set-Cookie,则将删除cookie(参见RFC-6265第4.1.2节

设计

我说这是一个有观点的框架。与这个框架的接口是通过NetworkClient实现的。这个类仅暴露了八个方法。每个方法名称都与HTTP方法名称相对应。到目前为止,仅支持deletegetpostput。我忽略了其他方法,例如patch,因为即使有人说它们使用,实际上也没有人使用。

这些方法接受一个Endpoint类型,如果端点不需要响应,则返回一个Promise<void>,或者返回一个Promise<T>,其中T是一个可解码类型。添加Promise纯粹是为了提升开发者体验。

Endpoint类型是一个枚举。这是受几年前Chris Eidhof的一篇帖子启发的。

enum CatEndpoint {
    case cuddle
    case pet(catName: String)
    case feed(catName: String)
}

extension CatEndpoint: Endpoint {
    var baseURL: URL { return URL(string: "https://api.kringlekitty.com")! }
    var path: String {
        switch self {
        case .cuddle:
            return "/kittycuddles"
        case .pet(let catName):
            return "/pet/\(catName)/"
        case .feed(let catName):
            return "/feed/\(catName)/"
        }
    }
}

下面是如何在端点上调用GET请求的方法。

let cat = CatEndpoint.pet(catName: "Kringle")
networkClient = NetworkClient()

// This performs a GET request on https://api.kringlekitty.com/pet/Kringle
networkClient.get(cat).then { _ in
  print("🐱")
  }.catch { error in
    print("You gotta be kitten me!")
}

开发

这个框架是用Swift Package Manager创建的。在克隆存储库后开始使用最简单的方法是运行swift build来安装所有依赖项。