Giter VIP home page Giter VIP logo

net's Introduction

Net

Net is a HttpRequest wrapper written in Swift

Features

  • GET, POST, PUT, DELETE method
  • Powerful request params: nested params, number, string, dic, array, image, data
  • Json, Image, Xml Response
  • Download file: resume, suspend, cancel
  • Upload file, data, params(multi-part)
  • Progress closure
  • Background donwload, upload
  • Authentication
  • Batch of operations
  • BaseURL
  • Customizable header
  • Batch of operations
  • Basic authentiacation

Demo app

screenshot

Usage

Use one of the following methods to create a Net instance

// without baseURL
let net = Net()

// with baseURL
let net = Net(baseUrlString: "http://www.puqiz.com/") 

HttpRequest

GET Request
let url = "get_path"
let params = ["integerNumber": 1, "doubleNumber": 2.0, "string": "hello"]

net.GET(url, params: params, successHandler: { responseData in
		let result = responseData.json(error: nil)
		NSLog("result \(result)")
	}, failureHandler: { error in
		NSLog("Error")
	})

// you can also make a request with absolute url
let url = "http://www.puqiz.com/get_path"
net.GET(absoluteUrl: url, params: params, successHandler: { responseData in
		let result = responseData.json(error: nil)
		NSLog("result \(result)")
	}, failureHandler: { error in
		NSLog("Error")
	})

You can also use nested params

// nested params
let params = ["string": "test",
            "integerNumber": 1,
            "floatNumber": 1.5,
            "array": [10, 20, 30],
            "dictionary": ["x": 100.0, "y": 200.0],
            "image": NetData(pngImage: img, filename: "myIcon")]

By using responseData in sucessHandler closure you can quickly

  • get json dictionary
  • get image
  • parse xml

for GET, POST, PUT, DELETE request.

// get json dictionary from response data
let jsonDic = responseData.json(error: error)

// get image from response data
let image = responseData.image()

// parse xml with delegate
let result = responseData.parseXml(delegate: self)
POST Request

Net will automatically check your params to send request as a URL-Encoded request or a Multi-Part request. So you can easily post with number, string, image or binary data.

  • URL-Encoded Request
let url = "post_path"
let params = ["string": "test", "integerNumber": 1, "floatNumber": 1.5]
        
net.POST(url, params: params, successHandler: { responseData in
		let result = responseData.json(error: nil)
		NSLog("result: \(result)")
	}, failureHandler: { error in
		NSLog("Error")
	})
  • Multi-Part Request
let url = "post_path"
let img = UIImage(named: "puqiz_icon")
        
let params = ["string": "test", "integerNumber": 1,
            "icon": NetData(pngImage: img, filename: "myIcon")]
        
net.POST(url, params: params, successHandler: { responseData in
		let result = responseData.json(error: nil)
		NSLog("result: \(result)")
	}, failureHandler: { error in
		NSLog("Error")
	})
PUT Request
let url = "put_path"
let params = ["string": "test", "integerNumber": 1, "floatNumber": 1.5]
        
net.PUT(url, params: params, successHandler: { responseData in
		let result = responseData.json(error: nil)
		NSLog("result: \(result)")
	}, failureHandler: { error in
		NSLog("Error")
	})
DELETE Request
let url = "delete_path"
let params = ["id": 10]
        
net.DELETE(url, params: params, successHandler: { responseData in
		NSLog("result: \(result)")
	}, failureHandler: { error in
		NSLog("Error")
	})

Task

Before using download/upload function you have to call setupSession method to setup the session.

// setup session without backgroundIdentifier
net.setupSession()

To perform background downloads or uploads, you have to call setupSession method with a background identifier string. Then your download/upload tasks can be run even when the app is suspended, exits or crashes.

// setup session with backgroundIdentifier
net.setupSession(backgroundIdentifier: "com.nghialv.download")

// you can set eventsForBackgroundHandler closure
// this closure will be invoked when a task is completed in the background
net.eventsForBackgroundHandler = { urlSession in
		urlSession.getDownloadingTasksCount{ downloadingTaskCount in
		if downloadingTaskCount == 0 {
			NSLog("All files have been downloaded!")
		}
	}
}
Download
let downloadTask = net.download(absoluteUrl: url, progress: { progress in
		NSLog("progress \(progress)")
	}, completionHandler: { fileUrl, error in
		if error != nil {
			NSLog("Download failed")
		}
		else {
			NSLog("Downloaded to  : \(fileUrl)")
		}
	})

// you can control your task
downloadTask.resume()
downloadTask.suspend()
downloadTask.cancel()
Upload
  • Upload with file path
let task = net.upload(absoluteUrl: url, fromFile: file, progressHandler: { progress in
		NSLog("progress \(progress)")
	}, completionHandler: { error in
		if error != nil {
			NSLog("Upload failed : \(error)")
		}
		else {
			NSLog("Upload completed")
		}
	})
  • Upload with data
let yourData = NSData(...)
        
net.upload(absoluteUrl: url, data: yourData, progressHandler: { progress in
		NSLog("progress: \(progress)")
	}, completionHandler: { error in
		NSLog("Upload completed")
	})
  • Upload with params
let image = UIImage(named: "image_file")
let imageData = UIImagePNGRepresentation(image)
let params = ["number": 1, "string": "net", "data": imageData]

net.upload(absoluteUrl: imgUrl, params: params, progressHandler: { progress in
		NSLog("progress: \(progress)")
	}, completionHandler: { error in
		NSLog("Upload completed")
	})

By default, the upload task will be performed as POST method and

  • Content-Type = application/octet-stream (upload with file or data)
  • Content-Type = multipart/form-data (upload with params)

But you can configure the upload task before resuming.

// set method
yourUploadTask.setHttpMethod(.PUT)

// set header field
yourUploadTask.setValue(value: "your_value", forHttpHeaderField: "header_field")

Integration

Just drag Net folder to the project tree

net's People

Contributors

nghialv avatar jonathanporta avatar wood1k avatar shaungehring avatar cnbuff410 avatar

Watchers

James Cloos avatar Naveed Ahsan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.