iOSEatr
iOS(Swift)中带有构建器的 RESTful 网络服务消费者
更新日志
查看更新日志请访问 此处
特性
- Builder 模式
- 自动编码参数和表单编码正文
- 支持同步或异步操作
- 支持进度观察者
- 支持 HandyJSON 对象 https://github.com/alibaba/HandyJSON
需求
- Swift 4.2 或更高版本
安装
CocoaPods
在您的 Podfile 中添加以下内容
pod 'Eatr', '~> 0.1.6'
手动
- 克隆此仓库。
- 已添加到项目中。
- 恭喜!
使用示例
同步
使用 HttpRequestBuilder 构建 Object,然后执行。
//HttpGet
let getResponse : Response? = EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
.addHeader(withKey : "SOME-HEADER", andValue : "header_value")
.addParam(withKey : "param_key", andValue : "param_value")
.awaitExecute()
if let response : EatrResponse = getResponse {
let rawResponse : URLResponse? = response.rawResponse
let isSuccess : Bool = response.isSuccess
let isError : Bool = response.isError
let statusCode : Int? = response.statusCode
let body : Data? = response.rawBody
let strBody : String? = response.bodyAsString
let jsonBody : [String : Any?] = response.bodyAsJson
let arrJsonBody : [Any?] = response.bodyAsJsonArray
let parsedBody : YourHandyJSONObj = response.parsedBody()
let parsedArray : [YourHandyJSONObj?] = response.parsedArrayBody
}
//HttpPost with Json body
let postJsonResponse : Response? = EatrRequestBuilder.httpPost.set(url : "http://your.url.here")
.addHeader(withKey : "SOME-HEADER", andValue : "header_value")
.addParam(withKey : "param_key", andValue : "param_value")
.set(jsonBody : jsonDictionary).awaitExecute()
您可以使用原始内容、表单数据、字符串、HandyJSON 对象或任何 JSON 对象作为请求体。
简单异步
与同步操作相同,但是您需要在执行方法中传递一个消费者函数。
请注意,如果达到超时,闭包内的响应将为 null。
//Basic
EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
.addHeader(withKey : "SOME-HEADER", andValue : "header_value")
.addParam(withKey : "param_key", andValue : "param_value")
.asyncExecute(onFinished : { response : Response? in
//YOUR CODE HERE
// WILL BE EXECUTE AFTER REQUEST IS FINISHED
})
高级异步/同步
与任何异步 HTTP 请求相同,但你可以设置单独的消费者。你可以设置 5 个闭包消费者。
- onProgress - 对于每次进度都会运行,它会提供从 0.0f 到 1.0f 的进度。
因为这个方法会定期调用,最好不要在这个方法中创建对象。 - onBeforeSending,在发送前执行
- onResponded,只有当你收到响应时才会执行
- onTimeout,只有当你超时后没有收到响应时才会执行
- onException,只有当你收到未处理的异常时才会执行
- onFinished,所有请求完成后执行
您不必设置所有消费者。只需设置您需要的那个。
请注意,如果达到超时,闭包内的响应将为 null。
//with onFinished closure
EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
.addHeader(withKey : "SOME-HEADER", andValue : "header_value")
.addParam(withKey : "param_key", andValue : "param_value")
.set(onTimeout : {
//YOUR CODE HERE
})
.set(onBeforeSending : { (session : URLSession) -> URLSession in
//YOUR CODE HERE
})
.set(onError : { error : Error in
//YOUR CODE HERE
})
.set(onProgress : { progress : Float in
//YOUR CODE HERE
})
.set(onResponded : { response : Response in
//YOUR CODE HERE
})
.asyncExecute()
//you can even do it synchronously and all your closure will be executed synchronously
let response : Response? = EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
.addHeader(withKey : "SOME-HEADER", andValue : "header_value")
.addParam(withKey : "param_key", andValue : "param_value")
.set(onTimeout : {
//YOUR CODE HERE
})
.set(onBeforeSending : { (session : URLSession) -> URLSession in
//YOUR CODE HERE
})
.set(onError : { error : Error in
//YOUR CODE HERE
})
.set(onProgress : { progress : Float in
//YOUR CODE HERE
})
.set(onResponded : { response : Response in
//YOUR CODE HERE
})
.awaitExecute()
使用委托
如果更愿意使用委托,您可以使用EatrDelegate协议,其中包含以下可用方法
- eatrOnBeforeSending(_ sessionToSend : URLSession) -> URLSession
- eatrOnTimeout()
- eatrOnError(_ error: Error)
- eatrOnProgress(_ progress: Float)
- eatrOnResponded(_ response: EatrResponse)
- eatrOnFinished()
所有方法都是可选的,只需使用您需要的。
EatrRequestBuilder.httpGet.set(url : "http://your.url.here")
.addHeader(withKey : "SOME-HEADER", andValue : "header_value")
.addParam(withKey : "param_key", andValue : "param_value")
.set(delegate : self)
.asyncExecute()
贡献
我们非常欢迎您为