iService 0.0.3

iService 0.0.3

测试已测试
Lang语言 SwiftSwift
许可协议 MIT
Released最新版本2015年12月
SPM支持SPM

Jakub Zaczek维护。



iService 0.0.3

  • 作者:
  • Jakub Zaczek

iService

使用简洁的方式与RESTful接口进行通信。

安装

将此行复制到您的Podfile中:

pod 'iService', '~> 0.0'

请确保也添加!use_frameworks

描述

iService提供两个类:Service代表RESTful服务,另一个是ServiceRealm用于共享请求配置的容器。

Service

Service类提供了CRUD(创建、检索、更新、删除)接口来与RESTful API交互。每个CRUD方法都返回一个来自iPromisePromise

let userService = Service(baseUrl: NSURL(string: "jsonplaceholder.typicode.com/users")!)

// does a GET on https://jsonplaceholder.typicode.com/users/1?
userService.retrieve("1").then({ result in
    let request = result.request    // NSURLRequest
    let response = result.response  // NSHTTPURLResponse
    let data = result.data          // NSData
    let error = result.error        // NSError
})

服务可以在Realm中注册自己,以使用共享请求配置

ServiceRealm.get("jsonplaceholder").register(userService)

// or 
ServiceRealm.register(userService, forRealmAtKey: "jsonplaceholder")

// or 
userService.registerForRealm(ServiceRealm.get("jsonplaceholder"))

可以从ServiceRealm中覆写每项请求的配置。

let user = "{\"userId\": 1}".dataUsingEncoding(NSUTF8StringEncoding)!

// let's add some headers
userService
    .override({ configuration
        configuration.addHeader("Content-Type", withValue: "application/json")
    })
    .create(user)
    .then({ result in
        //...
    })

// this request will not inherit headers from previous call
userService
    .retrieve("1")
    .then({ result in
        //...
    })

ServiceRealm

ServiceRealm是一个用于公共配置的容器,例如:

  • 请求授权
  • 内容类型
  • 接受的语言

ServiceRealm提供了一个CRUD-HTTP方法的映射,这些可以在需要时覆写

static public let defaultCRUDMap: CRUDMap = [
    .CREATE:    .POST,
    .RETRIEVE:  .GET,
    .UPDATE:    .PUT,
    .DESTROY:   .DELETE
]

// override by calling
public func overrideCrudMap(map: CRUDMap) -> ServiceRealm

//or
public func overrideCrudMethod(method: Service.CRUDMethod, withHTTPMethod httpMethod: Service.HTTPMethod) -> ServiceRealm

可以全局或按CRUD方法配置HTTP头部

public typealias HTTPHeaderDictionary = [String: String]

public func addHeader(header: String, withValue value: String) -> ServiceRealm 
public func addHeaders(headers: HTTPHeaderDictionary) -> ServiceRealm
public func addHeader(header: String, withValue value: String, specificForCRUDMethod crudMethod: Service.CRUDMethod) -> ServiceRealm
public func addHeaders(headers: HTTPHeaderDictionary, specificForCRUDMethod crudMethod: Service.CRUDMethod) -> ServiceRealm

缓存策略也是如此

public func overrideGlobalCachePolicy(cachePolicy: NSURLRequestCachePolicy) -> ServiceRealm
public func overrideCachePolicy(cachePolicy: NSURLRequestCachePolicy, forCrudMethod method: Service.CRUDMethod) -> ServiceRealm

配置调用可以串联,因此整个工作流程看起来是这样的:

let userService = Service(baseUrl: NSURL(string: "jsonplaceholder.typicode.com/users")!)

ServiceRealm.get("jsonplaceholder")
    .addHeaders([
        "Authorization": "Token sagsrbiusd90322sdf4f3gd4",
        "Content-Type": "application/json",
    ])
    .addHeader("Accept-Language", withValue: "en", specificForCRUDMethod: .RETRIEVE)
    .overrideGlobalCachePolicy(NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData)
    .register(userService)

userService.retrieve("1").then({ result in
    // ...
})

文档

文档可在此处找到

许可协议

请参阅LICENCE