Nowadays, almost every mobile application connects to a server in order to exchange data. This is a key consideration at the beginning of any project: the developer must decide whether to write a native manager, which app will use to connect with API or opt for one of the heavy libraries and use a small percentage of its capabilities. We decided to create our own library and after over two months of work, finally, we can introduce SwiftAPI, our first iOS library.

You may ask: Why create another iOS library if there are already plenty of similar ones? That’s very good question. The only real justification for creating something new is because it is needed, and that is exactly the case here.

We required the library to be:

  • written in the latest version of Swift,
  • easy to upgrade,
  • as light as possible,
  • ready to use out of the box,
  • able to handle the most commonly used network operations.

After over two months of work, finally, we can introduce SwiftAPI, our first iOS library available at

How it’s built

SwiftAPI is built using Swift 3, dedicated to iOS, OS X, tvOS and watchOS. The library is split into three layers.

  1. The first implements creating requests for sending data, uploading and downloading files. It also allows users to send, suspend, resume and cancel multiple requests. Running requests in the background is also supported. For network tasks, URLSession class from the Foundation framework is used. The whole layer is internal and not available for use outside the library.
  2. The second introduces the public, easy to use ApiService, helper classes, and structures. This allows the sending of predefined requests to a URL with parameters. Any parameters not required are set to default values, allowing you to customize only those parameters you need. Consequently, the code you are writing is much clearer and more readable. The methods for sending requests are split into two parts: the first is for data requests, and the second is for files. The ApiRequest structure allows you to manage each particular request or simply follow its progress. For every request you can add an array of custom headers, decide if it should be sent in the foreground or background, and whether you would like to follow its progress. In cases of a positive server response, the completion handler will contain an ApiResponse instance, which includes response status code, headers, and data. However, if a request fails, the completion handler will give an Error instance, describing the problem.
  3. The third layer adds the functionality of the REST service, helper protocols, and structures. The RestService consists of the base URL of server and API path that may be used for switching between different API versions. It also allows GET, POST, PUT, PATCH or DELETE commands to be applied to data or file resources. Every method of service returns an instance of ApiRequest to allow management of the request. Similar to the second layer, any unrequired parameters are set to default values.

How to use it

Let’s assume that we want to download an image using our library. As an example, we’ll use the Wikipedia logo available here: logo. For this purpose, ApiService will be perfect.

First, let’s import our library:

import SwiftAPI

Then create an instance of service:

let service = ApiService()

Now, let’s define the source and destination URLs:

let sourceUrl = URL(string: "")!
let destinationUrl = Bundle.main.url(forResource: "wikipedia", withExtension: "png")!

As a destination, we use the main bundle folder.
The only thing that remains is downloading:

_ = service.downloadFile(from: sourceUrl, to: destinationUrl) { (response, error) in
  if let error = error {
    print("File could not be downloaded, because: \(error.localizedDescription)")
  } else if let response = response {
    print("Downloading finished with status: \(response.statusCode.rawValue) \(response.statusCode.description)")

And that’s it! If you have any questions or feedback just get in touch with me.

  • Łukasz Pająk


Featured Post Technology

Face Validator: open source Symfony3 face detection budle

Have you ever used an application to upload a profile picture? Sure you have. That picture then shows up with every reference to the user. In the systems we...

Business Featured Post

INFOGRAPHIC: How to create an Agile Office

A few months ago we wrote an article on how to create an agile office. It seems that you really liked our take on agile office and thus we decided to...

Business Featured Post

Which software companies do other CIOs work with?

A personal recommendation from someone you trust can be the biggest factor when faced with a difficult purchasing decision. Imagine a friend saying to you, “Honestly, this is the...

This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies.

To find out more click here

Ok, Thanks