Giter Site home page Giter Site logo

Comments (5)

ishkawa avatar ishkawa commented on August 28, 2024
  • 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.

delebedev avatar delebedev commented on August 28, 2024

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.

ishkawa avatar ishkawa commented on August 28, 2024

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.

ishkawa avatar ishkawa commented on August 28, 2024

I have just pushed ad0b537 to feature branch, which implements this idea.

from apikit.

ishkawa avatar ishkawa commented on August 28, 2024

This is resolved in 0.4.0.

from apikit.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.