• Stars
    star
    114
  • Rank 308,031 (Top 7 %)
  • Language
    Swift
  • Created over 10 years ago
  • Updated over 10 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An Generic HTTP Request Library For Swift

GRequest

An HTTP request library written in Swift.

##Basic Usage Be simple, as it should be:

Request("https://api.github.com/repos/lingoer/SwiftyJSON/issues").get{
  response in
  println(response.content)//HTTP Body as NSData
}

If you need more infomation:

Request("https://api.github.com/repos/lingoer/SwiftyJSON/issues").get{
  response in
  println(response.headers)
  println(response.MIMEType)
  println(response.statusCode)
  println(response.encoding)
  println(response.error)
  println(response.content)//HTTP Body as NSData
  println(response.string)//HTTP Body as String
  println(response.object)//HTTP Body as Deserialized Custom Object, Default is NSData. See Below for more info
}

Use .query() to pass parameters for GET methods

Request("www.example.com/api").query(["labels":"discuss"]).get{
  response in
}

As for POST:

//This will encode body as application/x-www-form-urlencoded
Request("http://www.example.com").formBody(["key":"value"]).post{
  response in
}
//This will encode body as application/json
Request("http://www.example.com").jsonBody(["key":"value"]).post{
  response in
}
//You can custom your HTTP Body to POST, with Content-Type provided after it.
Request("http://www.example.com").body(customBodyData, typeString:"application/json; charset=utf-8").post{
  response in
}

More:

Request("http://www.example.com").head{
  response in
}
Request("http://www.example.com").put{
  response in
}
Request("http://www.example.com").delete{
  response in
}
Request("http://www.example.com").patch{
  response in
}

##Instances And Chainnings

A Request is in fact a GRequest<T>

It's typealias Request = GRequest<NSData> as default.

And a GRequest is a Generic class specifiying the behavior of the response.

Most methods returns an instance of the GRequest to make chains.

For example .path():

Request("https://api.github.com").path("/repos/lingoer/SwiftyJSON/issues").get{
  response in
}

###Response Deserialization As for the response behavior.

It's mostly about Response Deserialization:

Request("https://api.github.com/repos/lingoer/SwiftyJSON/issues").query(["labels":"discuss"]).get{
  (response:GResponse<JSONValue>) in
  println(response.object)//It's JSON Now
}

Note for more infomation about the JSONValue, see SwiftyJSON

If you need something.Just specify it!

Request("https://www.google.com/images/srpr/logo11w.png").get{
  (response:GResponse<UIImage>) in
  let image:UIImage = response.object!
}

If you don't want to do that every time:

let client = GRequest<JSONValue>("http://api.example.com")
client.path("/path/to/resource").get{
  response in
  println(response.object) //Its JSON Now
}

###Extensibility You can add your custom implementation of your Model deserialization.

By extentions conform protocol: ResponseDeserialization

extension CustomModel:ResponseDeserialization{
  class func convertFromData(data:NSData!) -> (CustomModel?, NSError?)
}

GRequest<CustomModel>("http://api.example.com").get{
  response in
  let model:CustomModel! = response.object
}