A restful network interface with Codable
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Amaca rename DecodableResponseHandler to CodableResponseHandler May 6, 2018
CCommonCrypto include common crypto module May 1, 2018
Example rename DecodableResponseHandler to CodableResponseHandler May 6, 2018
.gitignore
.travis.yml
Amaca.podspec apply cache to codable service May 6, 2018
LICENSE
README.md update readme Apr 28, 2018
_Pods.xcodeproj Initial commit Apr 25, 2018

README.md

Amaca

CI Status Version License Platform Maintainability

Installation

Amaca is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'Amaca'

Setup

Even when Amaca is based in convention over configuration principle, there are few things to setup.

AmacaConfigurable Protocol

You must implement a structure or a class conforming the AmacaConfigurable protocol where it will be defined the base url and the session for your connections, among with the authentication structure if needed.

public protocol ServicesConfig {
  var session: URLSession { get }
  var baseURL: URL { get }
}

Example

struct ServicesConfig: AmacaConfigurable {
    let session: URLSession = URLSession.shared
    let baseUrl: URL = URL(string: "https://example.com/api")!
}

Usage

To initialize a service you must create an instance with the Codable you desire to parse a config and the path where all the RESTFUL routes reside.

Method URI Pattern Action
GET /users index
POST /users create
GET /users/:id show
PUT /users/:id update
DELETE /users/:id destroy

Then for each method you can call the correspondent action

Example Unauthenticated

  let config = ServicesConfig()
  let service = CodableService<User>(config: config, path: "/users", auth: nil)

  service.index { response in
    // your code goes here
    switch response.status {
    case .success:
      print(response.data!.count)
    default:
      print(response.status)
      print(response)
    }
  }

Authentication

Amaca provides authentication structs for query and header:

  • QueryAuthentication
  • HeaderAuthentication

Example Authenticated

  let config = ServicesConfig()
  let auth = QueryAuthentication(method: .basicHeader, token: "secret-token-1234")
  let service = CodableService<User>(config: config, path: "users", auth: auth)

  service.index { response in
    // your code goes here
    switch response.status {
    case .success:
      print(response.data!.count)
    default:
      print(response.status)
      print(response)
    }
  }

Note: CodableService internally implements dataTask other methods from URLSession could be supported in the future.

Contribute to the project

To contribute, just follow the next steps:

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
  • Fork the project
  • Start a feature/bugfix branch
  • Commit and push until you are happy with your contribution
  • It is desired to add some tests for it.
  • Make a Pull Request

License

Amaca is available under the MIT license. See the LICENSE file for more info.