Comments (5)
- Why API should be NSObject?
-> To be a delegate of NSURLSession. - Why framework takes responsibility for maintaining singleton?
-> I intended to provide separated sessions for each subclasses of APIs.
Actually, this implementation is tricky and not obvious, so changing this implementation is acceptable for me. How about this idea?
Managing Instance:
- API does not have any instances and session dictionary.
- API has a default session as a static variable.
- If an user want to separate session for a subclass, this static variable should be overrided.
(This means the user takes responsibility for maintaining instance.)
Default implementation of NSURLSessionDelegate:
- The default session has a delegate (not API instance) that implements these methods.
- If an user want to add custom behavior using delegate methods in NSURLSessionDelegate, session variable should be overrided by custom session with a delegate that implements additional methods.
Pros:
- No weird implementation.
Cons:
- More steps to implement custom delegate methods.
BTW, description of GitHub.instance
returns <DemoApp.GitHub: 0x7fb34272e9f0>
at runtime, but it is not inferred as GitHub
while coding. Anyway, this will be disappear from APIKit if the change above is adopted.
from apikit.
I've forgot completely that NSURLSession delegate should be NSObject 😇
In general described solution looks much more obvious for me, but I still have concerns about this case:
let's say I'm working with github API, and by project requirements some requests should utilize background session and all other - default. How can I solve that without duplicating code in my sibilings of API? The only way I see is make hieararchy API <- Githib <- BackgroundGithub
from apikit.
Good point. The case you mentioned should be considered in APIKit. Associating NSURLSession with API on 1-1 relation might make this library less flexible. On the other hand, APIKit should have 1 session at least for the simplest usage. Based on them, how about this:
- API has a default session, and
sendRequest(request:handler:)
method uses this session. - To send request in the other session, call
sendRequest(request:URLSession:handler:)
.
public class API {
public var defaultURLSession: NSURLSession
public class func sendRequest(request:handler:)
public class func sendRequest(request:URLSession:handler:)
}
from apikit.
I have just pushed ad0b537 to feature branch, which implements this idea.
from apikit.
This is resolved in 0.4.0.
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.