RxRestClient alternatives and similar libraries
Based on the "Networking" category.
Alternatively, view RxRestClient alternatives based on common mentions on social networks and blogs.
-
AFNetworking
A delightful networking framework for iOS, macOS, watchOS, and tvOS. -
CocoaAsyncSocket
Asynchronous socket networking library for Mac and iOS -
RestKit
RestKit is a framework for consuming and modeling RESTful web resources on iOS and OS X -
Reachability.swift
Replacement for Apple's Reachability re-written in Swift with closures -
YTKNetwork
YTKNetwork is a high level request util based on AFNetworking. -
ASIHTTPRequest
Easy to use CFNetwork wrapper for HTTP requests, Objective-C, Mac OS X and iPhone -
apollo-ios
๐ฑ ย A strongly-typed, caching GraphQL client for iOS, written in Swift. -
swift-protobuf
Plugin and runtime library for using protobuf with Swift -
RealReachability
We need to observe the REAL reachability of network. That's what RealReachability do. -
Netfox
A lightweight, one line setup, iOS / OSX network debugging library! ๐ฆ -
MonkeyKing
MonkeyKing helps you to post messages to Chinese Social Networks. -
SwiftHTTP
Thin wrapper around NSURLSession in swift. Simplifies HTTP requests. -
Siesta
The civilized way to write REST API clients for iOS / macOS -
APIKit
Type-safe networking abstraction layer that associates request type with response type. -
ResponseDetective
Sherlock Holmes of the networking layer. :male_detective: -
Networking
Easy HTTP Networking in Swift a NSURLSession wrapper with image caching support -
XMNetworking
A lightweight but powerful network library with simplified and expressive syntax based on AFNetworking. -
Pitaya
๐ A Swift HTTP / HTTPS networking library just incidentally execute on machines -
SPTDataLoader
The HTTP library used by the Spotify iOS client -
Reach
A simple class to check for internet connection availability in Swift. -
Digger
Digger is a lightweight download framework that requires only one line of code to complete the file download task -
SOAPEngine
This generic SOAP client allows you to access web services using a your iOS app, Mac OS X app and AppleTV app. -
TRON
Lightweight network abstraction layer, written on top of Alamofire -
TWRDownloadManager
A modern download manager based on NSURLSession to deal with asynchronous downloading, management and persistence of multiple files. -
Transporter
A tiny library makes uploading and downloading easier -
Restofire
Restofire is a protocol oriented networking client for Alamofire -
ws โ๏ธ
โ ๏ธ Deprecated - (in favour of Networking) :cloud: Elegantly connect to a JSON api. (Alamofire + Promises + JSON Parsing) -
EVURLCache
a NSURLCache subclass for handling all web requests that use NSURLRequest -
AFNetworking+RetryPolicy
Nice category that adds the ability to set the retry interval, retry count and progressiveness. -
MultiPeer
๐ฑ๐ฒ A wrapper for the MultipeerConnectivity framework for automatic offline data transmission between devices -
AFNetworking-Synchronous
Synchronous requests for AFNetworking 1.x, 2.x, and 3.x -
ROADFramework
ROAD โ Rapid Objective-C Applications Development
Appwrite - The open-source backend cloud platform
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of RxRestClient or a related project?
README
RxRestClient
Example
To run the example project, clone the repo, and run pod install
from the Example directory first.
Requirements
- iOS 10.0+
- tvOS 10.0+
- macOS 10.12+
- Swift 5.1+
- Xcode 11+
Migration Guides
- [RxRestClient 2.0 Migration Guide](./Documentation/RxRestClient%202.0%20Migration%20Guide.md)
Installation
CocoaPods RxRestClient is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'RxRestClient'
Swift Package Manager You can use The Swift Package Manager to install RxRestClient by adding the proper description to your Package.swift file:
import PackageDescription
let package = Package( name: "YOUR_PROJECT_NAME", targets: [], dependencies: [ .package(url: "https://github.com/STDevTM/RxRestClient.git", from: "2.1.0") ] )
Next, add RxRestClient to your targets dependencies like so: .target( name: "YOUR_TARGET_NAME", dependencies: [ "RxRestClient", ] ), Then run swift package update.
Features
- Simple way to do requests
- Simple way to have response state in reactive way
- Ability to customization
- Retry on any error
- Handle network reachability status
- Retry on become reachable
- Ability to use absolute and relative urls
- Swift Codable protocol support
- Use custom SessionManager
- Pagination support
- Complete Documentation
- more coming soon
How to use
First of all you need to create struct
of your response state and implement ResponseState
protocol.
struct RepositoriesState: ResponseState {
typealias Body = Data
var state: BaseState?
var data: [Repository]?
private init() {
state = nil
}
init(state: BaseState) {
self.state = state
}
init(response: (HTTPURLResponse, Data?)) {
if response.0.statusCode == 200, let body = response.1 {
self.data = try? JSONDecoder().decode(RepositoryResponse.self, from: body).items
}
}
static let empty = RepositoriesState()
}
It is required to mention expected Body type (String
or Data
).
After that you need to create request model:
struct RepositoryQuery: Encodable {
let q: String
}
Then you can do the request to get repositories:
import RxSwift
import RxRestClient
protocol RepositoriesServiceProtocol {
func get(query: RepositoryQuery) -> Observable<RepositoriesState>
}
final class RepositoriesService: RepositoriesServiceProtocol {
private let client = RxRestClient()
func get(query: RepositoryQuery) -> Observable<RepositoriesState> {
return client.get("https://api.github.com/search/repositories", query: query)
}
}
In order to customize client you can use RxRestClientOptions
:
var options = RxRestClientOptions.default
options.addHeader(key: "x-apikey", value: "<API_KEY>")
client = RxRestClient(baseUrl: <BASE _URL>), options: options)
Relative vs absolute url
In order to use relative url you need to give <BASE_URL>
when initializing client object.
let client = RxRestClient(baseURL: <BASE_URL>)
When calling any request you can provide either String
endpoint or absolute URL
. If you will String
it will be appended to baseURL
.
client.get("rest/contacts")
If baseURL
is nil
then it will try to convert provided String
to URL
.
In order to use absolute url even when your client has baseURL
you can provide URL
like this:
if let url = URL(string: "https://api.github.com/search/repositories") {
client.get(url: url, query: ["q": search])
}
Pagination
Pagination support is working only for GET
requests. In order to have pagination (or infinite scrolling) feature you need to implement following protocols for query and response models:
For query model you need to implement PagingQueryProtocol
:
struct RepositoryQuery: PagingQueryProtocol {
let q: String
var page: Int
init(q: String) {
self.q = q
self.page = 1
}
func nextPage() -> RepositoryQuery {
var new = self
new.page += 1
return new
}
}
For response model you need to implement PagingResponseProtocol
:
struct RepositoryResponse: PagingResponseProtocol {
let totalCount: Int
var repositories: [Repository]
private enum CodingKeys: String, CodingKey {
case totalCount = "total_count"
case repositories = "items"
}
// MARK: - PagingResponseProtocol
typealias Item = Repository
static var decoder: JSONDecoder {
return .init()
}
var canLoadMore: Bool {
return totalCount > items.count
}
var items: [Repository] {
get {
return repositories
}
set(newValue) {
repositories = newValue
}
}
}
For response states you need to use PagingState
class or custom subclass:
final class RepositoriesState: PagingState<RepositoryResponse> {
...
}
After having all necessary models you can do your request:
client.get("https://api.github.com/search/repositories", query: query, loadNextPageTrigger: loadNextPageTrigger)
loadNextPageTrigger
is an Observable
with Void
type in order to trigger client to do request for next page using new query model generated using nextPage()
function.
Author
Tigran Hambardzumyan, [email protected]
Support
Feel free to open issues with any suggestions, bug reports, feature requests, questions.
Let us know!
Weโd be really happy if you sent us links to your projects where you use our component. Just send an email to [email protected] and do let us know if you have any questions or suggestion.
License
RxRestClient is available under the MIT license. See the LICENSE file for more info.
*Note that all licence references and agreements mentioned in the RxRestClient README section above
are relevant to that project's source code only.