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

ModestProposal alternatives and similar libraries

Based on the "Network" category

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