使用简洁的方式与RESTful接口进行通信。
将此行复制到您的Podfile中:
pod 'iService', '~> 0.0'
请确保也添加!use_frameworks
iService提供两个类:Service
代表RESTful服务,另一个是ServiceRealm
用于共享请求配置的容器。
Service
类提供了CRUD(创建、检索、更新、删除)接口来与RESTful API交互。每个CRUD方法都返回一个来自iPromise的Promise
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
提供了一个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