Comments (9)
How can I implement retry ?
That implement does not work now....
Regards,
from apikit.
Hi jyounus,
APIKit does not have retry functionality because it aims at providing type-safe single request. IMO, rich functionality for multiple request makes this library complex, so I think combining multiple request is responsibility of developers.
Next, let's think about your use case. To implement auto-retrying, wrapping sendRequest
in a subclass is easiest. Here's example of implementation:
class CustomSession: Session {
override func sendRequest<T: RequestType>(request: T, handler: (Result<T.Response, APIError>) -> Void = {r in}) -> NSURLSessionDataTask? {
// 1. send request
return super.sendRequest(request) { [weak self] result in
// 2. check the error
if case .Failure(let error) = result where /* check if the error is E1101 */ {
// 3. refresh token if the error is E1101
self?.refreshTokenWithHandler { [weak self] refreshedToken in
// 4. retry reqeust
self?.sendRequest(request, handler: handler)
}
return
}
handler(result)
}
}
private func refreshTokenWithHandler(handler: String -> Void) {
...
}
}
Note that Session.sharedSession
is not a CustomSession
.
from apikit.
Hey ishkawa,
Thanks for the reply! I will try it out and get back to you if I have any issues.
Regarding Session.sharedSession
, any chance you could change "static" into "class" for your variables/methods? In theory, this should allow me to subclass Session
and override the sharedSession property.
from apikit.
Sounds good 👍 I'll work on this tomorrow.
Unlike static property, class property cannot be stored property, so overriding this property will be something like this:
class CustomSession: Session {
private static var privateSharedSession: Session = ...
override class var sharedSession: Session {
return privateSharedSession
}
}
I expect class property supports stored property in the future version of Swift, because the compiler says:
Class stored properties not yet supported in classes
from apikit.
Ah okay, fair enough. No worries, for now I've just duplicated the method and named it something else in my subclass, so it's working fine for me. Obviously not ideal, but that can be improved whenever Swift supports this feature. :)
from apikit.
This change has been released in 1.4.0!
from apikit.
Nice one! I'm currently using your 2.x beta branch, but I will switch to 1.4 and give it a try!
Thanks man, appreciate your efforts on this library! :D
from apikit.
Shipped 2.x beta 4 yesterday. Now, this change is also available on 2.x branch!
from apikit.
Awesome! Thanks :D
from apikit.
Related Issues (20)
- Does JSONBodyParameters support nested json? HOT 1
- 'NSInvalidArgumentException', reason: '*** -propertyForKey: only defined for abstract class HOT 1
- How to send request a nest JSON
- how to make request with body parameters json inside json HOT 1
- JSONBodyParameters - Protect adding extra escapes by JSONSerialization.data HOT 1
- Swift4.2 support HOT 6
- How about using a private queue as default callback queue?
- How to update json in BodyParameters HOT 4
- The specs repo latest version is 4.1.0,not 5.0.0 HOT 2
- [question] Was develop/4.0 branch abandoned? HOT 4
- Executing multipart request on same Part instance can cause waiting reading eternally
- Enable Swift 5.1's module stability
- [Q] `xcodebuild` with Swift Package Failed HOT 6
- There is an inconsistency in the PBXGroup references. HOT 1
- how to run Demo.playground? HOT 1
- where to write my common encrypt code
- This library isn't secure by default. It should have the option to set the URLConfiguration to ephemeral.
- Build failed with Xcode14.3
- Swift Concurrency warning
- Any support of Privacy Manifest?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from apikit.