RESTAPI 0.3.7

RESTAPI 0.3.7

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

Tarvo Mäesepp 维护。



RESTAPI 0.3.7

  • 作者
  • Tarvo Mäesepp

RESTAPI

基于 Foundation 的轻量级 REST API 传讯器,用 Swift 编写。一个简单易用的工具,可轻松与服务器 API 进行 JSON 格式通信。支持在 HTTP 身体中查询和有效的 JSON 对象。

框架目前支持 GETPOSTPUTDELETE 请求。

安装

Swift 2.2

对于 Swift 2.2 使用 0.2.2 标签。此版本将不再支持。

github "Gujci/RESTAPI" "== 0.2.2"

示例

简单请求

默认情况下,您可以执行单个请求,该请求返回一个简单的 JSON 响应。

let testServerApi = API(withBaseUrl: "http://jsonplaceholder.typicode.com")
testServerApi.get("/posts") { (error, data) in
    //This data will be SwiftyJSON's Optional JSON type by default (data: JSON?)
}

或者如果您愿意,您可以用同一请求获取解析的响应类型。

带有期望响应类型的请求

首先您必须实现您的响应类型,该类型必须遵循 JSONParseable 协议。

struct ExampleResponse: JSONParseable {
    var body: String
    var id: Int
    var title: String
    var userId: Int

    init(withJSON data: JSON) {
        body = data["body"].stringValue
        id = data["id"].intValue
        title = data["title"].stringValue
        userId = data["userId"].intValue
    }
}

在实现响应对象之后,您必须将完成参数列表中的期望响应数据类型设置为这种类型。

testServerApi.get("/posts") { (error, data: [ExampleResponse]?) in
    //This a swift array now, filled with ExampleResponse instances
}

在这种情况下期望的是一个数组作为响应,但简单类型也可以(如 ExampleResponse?)。重要的是,您必须将您的参数标记为可选的,否则您会得到编译时错误。

查询

查询就像这样简单

testServerApi.get("/posts", query: ["userId" : "1"]) { (error, object: [ExampleResponse]?) in
    //...
}

查询参数字典中的值必须实现 Queryable 协议,StringArray 类型默认实现了它。

POST 体参数

testServerApi.post("/posts", data: ["body": "something","id": 1, "title": "Some title", "userId": 9]) { (error, object) in
    //...
}

体参数应符合 ValidJSONObject 协议。默认情况下,ArrayDictionary 类型实现了它。

请求认证

要验证请求,您必须设置API实例的 authentication 属性。目前,此框架支持基于HTTP头和URL查询的简单访问令牌认证。以下是一个如何设置基于HTTP头认证的简单示例。

var accessToken: String?

var sessionAuthenticator: RequestAuthenticator {
    let auth = RequestAuthenticator()
    auth.tokenKey = "access_token"
    if let validToken = self.accessToken {
        auth.type = .HTTPHeader
        auth.accessToken = validToken
    }
    else {
        auth.type = .None
    }
    return auth
}
//...
    testServerApi.authentication = sessionAuthenticator
//...

待办事项列表

  • [x] 记录认证
  • [x] Carthage 支持
  • [ ] 扩展错误类型
  • [ ] 使JSON和[JSON]符合JSONParseable以减少冗余代码
  • [ ] 添加更多单元测试
  • [x] Travis