lightweight and flexible solution to HTTP Requests in Swift

StepNetworking

StepNetworking is a lightweight and flexible solution to HTTP Requests in Swift.

The goal is to make HTTP calls in Swift easy to create and read. It is built on async/await concurrency in Swift.

Getting Started

Requirements

  • Deployment target iOS 13+
  • Swift 5+

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate StepNetworking into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'StepNetworking'

Swift Package Manager

The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler.

[
    .package(url: https://github.com/Marcodeg/StepNetworking")
]

Importing

At the top of the file where you’d like to use StepNetworking.

import StepNetworking 

Create a Request

To create an HTTP request you have to compose it step by step through its builder.

HTTPRequest.builder
           .withURL("url")
           .withHTTPMethod(.get)
           ... // customize using builder methods
           .build()

These are the only mandatory steps, there are further possibilities to customize your request.

Execute a Request

Executing a request is just as simple, you just need to call the perform method.

let result = await HTTPRequest.builder
            .withURL("")
            .withHTTPMethod(.get)
            .build()
            .perform()

The default perform will return a Result, returning a Data in case of success, and a RequestError in case of failure.

You can also decide to return an object of type Decodable in case of success and one in case of failure if the response will give a JSON in case of failure. In both cases, the library will do the various encodings.

let result = await request.perform(successResponse: Response.self)
let result = await request.perform(successResponse: Response.self, failureResponse: FailureResponse.self)

Validate a Request
The request will be validated only if the status is between 200 and 300, but you can specify how to validate the request.

HTTPRequest.builder
           .withURL("url")
           .withHTTPMethod(.get)
           .withValidator(.base(acceptedStatusCode: 200..<205))
           .build()

The withValidator method takes as input parameter a RequestValidator.

RequestValidator is an enum that contains two cases: base and retry. Both allow you to specify a range in which the status code must fall to be accepted, the retry also allows you to re-perform the request when it fails, specifying the maximum number of attempts

HTTPRequest.builder
           .withURL("url")
           .withHTTPMethod(.get)
           .withValidator(.retry(acceptedStatusCode: 200..<206, maxRetryCount: 3, delay: 1))
           .build()

License

This software is released under the MIT license. See LICENSE for details.

GitHub

View Github