Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jkolb/ModestProposal
Makes building HTTP URLs and requests easy.
https://github.com/jkolb/ModestProposal
Last synced: 2 months ago
JSON representation
Makes building HTTP URLs and requests easy.
- Host: GitHub
- URL: https://github.com/jkolb/ModestProposal
- Owner: jkolb
- License: mit
- Created: 2014-10-04T15:04:52.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2015-12-17T16:34:42.000Z (about 9 years ago)
- Last Synced: 2024-10-28T12:55:15.712Z (3 months ago)
- Language: Swift
- Homepage:
- Size: 59.6 KB
- Stars: 10
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-swift-cn - ModestProposal - an HTTP toolbox. (Libs / Network)
README
# 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
}