Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 

ModestProposal 2.0

Makes building HTTP URLs and requests easy. Can be used with any networking library that accepts NSURLRequest as a parameter.

Features

  • URL building helpers
  • Request building helpers
  • Basic authentication encoding
  • Validation of HTTP response, status codes, and content types
  • Enums for common HTTP status codes, content types, methods, and header fields

URL Building

let baseURL = NSURL(string: "http://test.com")!

// http://test.com/login
let loginURL = baseURL.relativeToPath("/login")

// http://test.com/data?id=100&page=3
let dataURL = baseURL.relativeToPath("/data", parameters: ["id": "100", "page": "3"])

Request building

let baseRequest = NSMutableURLRequest(URL: baseURL)

// Set custom header for all requests
baseRequest["Custom-Header"] = "Custom value"

// URL will have the parameters added to the end of it
let readRequest = baseRequest.GET(path: "/object", parameters: ["id": "100", "page": "3"])
readRequest[.Accept] = "application/json"

// HTTPBody will be set to parameters, content type will be "application/x-www-form-urlencoded"
// and length will be set to match the size of the data generated by parameters
let createRequest = baseRequest.POST(path: "/create", parameters: ["id": "100", "page": "3"])

// HTTPBody will be set to JSON data, content type will be "application/json"
// and length will be set appropriately
let updateRequest = baseRequest.PUT(path: "/update", JSONObject: ["test": 100])

// HTTPBody will be set to data, content type will be "application/octet-stream"
// and length will be set to the length of the supplied data
let data = NSData(contentsOfFile: "file")
let dataRequest = baseRequest.POST(path: "/data", body: data)

Basic authentication

let baseRequest = NSURLRequest(URL: baseURL)
let loginRequest = baseRequest.POST(path: "/login")
loginRequest.basicAuthorization(username: "test", password: "test")

Response validation

let response: NSURLResponse = ...

do {
    try response.validateIsSuccessfulJSON()
    // OR
    try response.validateIsSuccessfulImage()
    // OR
    try response.validateIsHTTP(statusCode: .OK, contentType: .ApplicationJSON)
    // OR
    try response.validateIsHTTP(statusCode: 200, contentType: "application/json")
    // OR
    try validate(when: respone.isHTTP, otherwise: HTTPError.UnexpectedResponse(response))
    try validate(when: respone.HTTP.statusCode == 200, otherwise: HTTPError.UnexpectedStatusCode(respone.HTTP.statusCode))
    try validate(when: respone.HTTP.MIMEType == "application/json", otherwise: HTTPError.UnexpectedContentType(respone.HTTP.MIMEType))
}
catch {
    // Handle error
}

About

Makes building HTTP URLs and requests easy.

Resources

License

Stars

Watchers

Forks

Packages

No packages published