Code Quality Rank: L5
Programming language: Swift
License: MIT License
Tags: Network    
Latest version: v2.0.0

ModestProposal alternatives and similar libraries

Based on the "Network" category.
Alternatively, view ModestProposal alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of ModestProposal or a related project?

Add another 'Network' Library


ModestProposal 2.0

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


  • 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