Booming is a base network library for Swift. Developed for Swift 5, it aims to make use of the latest language features. The framework's ultimate goal is to enable easy networking that makes it easy to write well-maintainable code.
HollowCodable is a codable customization using property wrappers library for Swift.
RxNetworks is a declarative and reactive networking library for Swift.
đ§. RxSwift + Moya + HandyJSON/Codable + Plugins.đđđ
English | įŽäŊä¸æ
This is a network api set of infrastructure based on Moya, also support responsive network with RxSwift.
At the moment, the most important features of Booming can be summarized as follows:
- Support reactive network requests combined with RxSwift.
- Support for OOP also support POP network requests.
- Support data parsing with HandyJSON and Codable.
- Support configuration of general request and path, general parameters, etc.
- Support simple customization of various network plugins for Moya.
- Support uploading and downloading files/resources and so on.
- Support for added default plugins with
BoomingSetup.basePlugins
. - Support setup authorization certificate with Alamofire RequestInterceptor.
- Support automatic managed loading plugins hud.
- Support token plugin validation and automatically retries new token requests.
- Support 18 plugins have been packaged for you to use.
How to use CODE_OF_CONDUCT.
SharedAPI.userInfo(name: "yangKJ").request(success: { json, finished in
// do somthing..
}, failure: { error in
print(error.localizedDescription)
})
or
TokenAPI.auth.request(complete: { res in
switch res {
case let .success(json):
// do somthing..
case let .failure(error):
print(error.localizedDescription)
}
})
This module is mainly based on moya package network related plugins.
- At present, 14 plugins have been packaged for you to use:
- Header: Network HTTP Header Plugin.
- Debugging: Network printing, built in plugin.
- GZip: Network data unzip plugin.
- Shared: Network sharing plugin.
- Files: Network downloading files And Uploading resources plugin.
- Token: Token verify plugin.
- Ignore: Ignore plugin, the purpose is to ignore a plugin in this network request.
- Authentication: Interceptor plugin.
- Cache: Network data cache plugin.
- CustomCache: Custom network data caching plugin.
- Lottie: Animation loading plugin based on lottie.
For ios platform:
- Loading: Loading animation plugin.
- Warning: Network failure prompt plugin.
- Indicator: Indicator plugin.
If you want to use token plugin and auth plugin you can refer to the project use case.
- Auth: Authorization plugin.
đˇ Simple to use, implement the protocol method in the API protocol, and then add the plugin to it:
var plugins: APIPlugins {
let cache = NetworkCachePlugin.init(options: .cacheThenNetwork)
let loading = NetworkLoadingPlugin.init(options: .init(delay: 0.5))
let warning = NetworkWarningPlugin.init()
let shared = NetworkSharedPlugin.init()
let gzip = NetworkGZipPlugin.init()
return [loading, cache, warning, shared, gzip]
}
This module mainly supports responsive data binding.
func request(_ count: Int) -> Observable<[CacheModel]> {
CacheAPI.cache(count).request()
.mapHandyJSON(HandyDataModel<[CacheModel]>.self)
.compactMap { $0.data }
.observe(on: MainScheduler.instance)
.catchAndReturn([])
}
This module is based on HandyJSON
package network data parsing.
- Roughly divided into the following 3 parts:
- HandyDataModel: Network outer data model.
- HandyJSONError: Parse error related.
- RxHandyJSON: HandyJSON data parsing, currently provides two parsing solutions.
- Option 1: Combine
HandyDataModel
model to parse out data. - Option 2: Parse the data of the specified key according to
keyPath
, the precondition is that the json data source must be in the form of a dictionary.
- Option 1: Combine
đˇ Example of use in conjunction with the network part:
func request(_ count: Int) -> Driver<[CacheModel]> {
CacheAPI.cache(count).request()
.asObservable()
.mapHandyJSON(HandyDataModel<[CacheModel]>.self)
.compactMap { $0.data }
.observe(on: MainScheduler.instance)
.delay(.seconds(1), scheduler: MainScheduler.instance)
.asDriver(onErrorJustReturn: [])
}
This module is serialize and deserialize the data, Replace HandyJSON.
đˇ Example of use in conjunction with the network part:
func request(_ count: Int) -> Observable<[CodableModel]> {
CodableAPI.cache(count)
.request(callbackQueue: DispatchQueue(label: "request.codable"))
.deserialized(ApiResponse<[CodableModel]>.self, mapping: CodableModel.self)
.compactMap({ $0.data })
.observe(on: MainScheduler.instance)
.catchAndReturn([])
}
CocoaPods is a dependency manager. For usage and installation instructions, visit their website. To integrate using CocoaPods, specify it in your Podfile:
pod 'Booming'
You should define your minimum deployment target explicitly, like:
platform :ios, '11.0'
If you want import cache plugin:
pod 'NetworkCachePlugin'
If you wang using Codable:
pod 'HollowCodable'
If responsive networking is required:
pod 'RxNetworks/RxSwift'
For other plugins and modules excluded, please read the podspec file.
The general process is almost like this, the Demo is also written in great detail, you can check it out for yourself.đˇ
Tip: If you find it helpful, please help me with a star. If you have any questions or needs, you can also issue.
Thanks.đ
- đˇ E-mail address: [email protected] đˇ
- đ¸ GitHub address: yangKJ đ¸
Buy me a coffee or support me on GitHub.
Alipay or WeChat. Thanks.
Booming is available under the MIT license. See the LICENSE file for more info.