🦉
RestBird
About
Lightweight, stateless REST network manager over the Codable protocol built upon Alamofire.
To learn more aboit this library, check out the documentation.
Requirements
- iOS 10.0+ / macOS 10.12+
- XCode 11.4+
- Swift 5.2+
Features
- Codable support.
- PromiseKit wrapper.
- RxSwift wrapper.
- Automatic request parameter serialization (Codable?)
Installation Instructions
Swift Package Manager
Add RestBird as a dependency to your project.
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "0.5")
Then, simply integrate RestBird with your target.
targets: [
Target(name: "YourTarget", dependencies: ["RestBird"])
]
CocoaPods
pod 'RestBird'
You can also try it out by running
pod try RestBird
Carthage
github "halcyonmobile/RestBird"
Setup
Steps for setting up the project for development:
- Clone the repo
- Generate Xcode project by executing
swift package generate-xcodeproj
- Open project
Usage
General
First you need to create your NetworkClientConfiguration
configuration with your custom or one of the provided session manager drivers. We're going to use the AlamofireSessionManager.
struct MainAPIConfiguration: NetworkClientConfiguration {
let baseUrl = "https://api.example.com"
let sessionManager = AlamofireSessionManager()
let jsonEncoder = JSONEncoder()
let jsonDecoder = JSONDecoder()
}
Now we can pass this configuration to the network client.
let networkClient = NetworkClient(configuration: MainAPIConfiguration())
In order to make requests, a DataRequest
object should be defined.
struct SignIn: DataRequest {
typealias ResponseType = Authentication
let email: String
let password: String
let suffix: String? = API.Path.login
let method: HTTPMethod = .post
var parameters: [String : Any]? {
return [API.Param.email: email, API.Param.password: password]
}
}
Now use your network client to execute requests.
let request = SignIn(email: "[email protected]", password: "123456")
networkClient.execute(request: request, completion: { result: Result<Authentication> in
print(result)
})
Middlewares
Middlewares are a powerful way to intercept network requests or react to the response the endpoint returns.
At the moment, middlewares fall under two categories:
- Pre Middlewares (evaluated before the request is about to be executed)
- Post Middlewares (evaluated after the request was executed)
struct LoggerMiddleware: PreMiddleware {
func willPerform(_ request: URLRequest) throws {
Logger.log(resquest)
}
}
struct ErrorMiddleware: PostMiddleware {
func didPerform(_ request: URLRequest, response: URLResponse, data: Data?) throws {
if let data = data, let error = ErrorProvider.provide(for: data) {
throw error
}
}
}
// Register middleware
networkClient.register(LoggerMiddleware())
networkClient.register(ErrorMiddleware())
Meta support
To avoid writing boilerplate code for network classes, we wrote a couple of templates to generate code using Sourcery. Head over to the template repository.
Here's how two requests would look like using the templates:
/// sourcery: Service
protocol PostService {
/// sourcery: path = /posts/\(id)
/// sourcery: pathParam = id
func get(id: String, completion: (result: Result<Post>) -> Void)
/// sourcery: method = post, path = /posts
/// sourcery: parameter = post
/// sourcery: parameter = json
func save(post: Post, completion: (result: Result<Post>) -> Void)
}
Convenience
You can find convenience wrappers for RestBird which are not distributed through the package. This includes a PromiseKit and an RxSwift wrapper.
Check out here.
License
RestBird is released under the MIT license. See LICENSE for details.
If you use the open-source library in your project, please make sure to credit and backlink to http://halcyonmobile.com