Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

global default options and handlers #22

Open
farskid opened this issue Feb 23, 2017 · 22 comments
Open

global default options and handlers #22

farskid opened this issue Feb 23, 2017 · 22 comments

Comments

@farskid
Copy link

farskid commented Feb 23, 2017

Since fetch apis are used a lot in a typical web application, it would be nice to have a unfetch.defaults object that sets default parameters of all requests.
A use case would be to set base URL of all requests.

unfetch.defaults.baseURL = 'my-api-endpoint'
@tunnckoCore
Copy link
Collaborator

Sounds good, but don't believe we can get 500b, haha

@farskid
Copy link
Author

farskid commented Feb 23, 2017

Well, having a useful feature to cost some bytes wouldn't harm I guess.
Let's watch the package size to see if there is a chance for adding this feature.

@tunnckoCore
Copy link
Collaborator

I'm agree with you and was thinking the same thing when mitt came - in its case we can get few more features if we allow 20-30bytes more, but @developit is holding strongly that it should be 200b. I'm agree with him too and there was a discussion like if we allow such things we'll get to point such as "let's add more more 1-2kb" haha and was mentioned momentjs that it started like micro lib.

So yea, it is good thing to try to be strict.

@farskid
Copy link
Author

farskid commented Feb 23, 2017

@tunnckoCore HAHA did not know that momentjs was a micro library at the beginning. Looking forward to hear about the decision from @developit . This feature whether added or not, both seems logical to me at the moment. :)

@tunnckoCore
Copy link
Collaborator

Yea, that's the exact comment developit/mitt#11 (comment), and i'm totally agree with him.

@developit
Copy link
Owner

This discussion makes me happy :)
Let's keep this on a list of nice-to-haves that we can look to if we save bytes.

Btw - for defaults, we should make a wrapper library, that way they would work for native fetch too 😀

@farskid
Copy link
Author

farskid commented Feb 23, 2017

@developit You mean like an IIFE that wraps the native or unfetch altogether?

@developit
Copy link
Owner

Yup, a way to inject defaults by proxying window.fetch:

let real = window.fetch;
window.fetch = (url, options) => {
  // Apply URL and options transforms here
  return old(url, ootions)
    .then(options.after || Object);
               // ^ middleware!!
};

@farskid
Copy link
Author

farskid commented Feb 23, 2017

Yeah, good pattern, agreed.

@tunnckoCore
Copy link
Collaborator

Absolutely agree to be separate kinda nanolib. Hm, let's coin nano frameworks? haha

@developit
Copy link
Owner

Unlibs

@developit
Copy link
Owner

@tunnckoCore @farskid - what do we want to do with these types of issues/PRs? We can't merge them because of the nature of this library (it being a polyfill and thus bound by the spec it emulates), but I hate closing them when there's good discussion and tasks to be taken away. Maybe we need a repo/place where these ideas/implementations go so that we can build up a set of feature requests for wrapper libraries?

@farskid
Copy link
Author

farskid commented Feb 26, 2017

@developit @tunnckoCore I guess a wrapper for addon features is a nice idea. Devs can either use the super light version or pay the price of not so much light version for the extra features such as global configurations, extra handlers, ...

@developit
Copy link
Owner

Exactly! And the wrapper will work regardless of whether unfetch or native fetch gets used.

@farskid
Copy link
Author

farskid commented Feb 26, 2017

Yup so much like a higher order API. Would love to contribute to the wrapper.

@tunnckoCore
Copy link
Collaborator

Exactly, that's the cool of micro things. : )

@developit
Copy link
Owner

Prior art:
https://github.com/RickWong/fetch-plus

@notpushkin
Copy link

I've written this in one of my projects sometime ago. fetch-plus seems a lot nicer though.

@developit
Copy link
Owner

@iamale totally stealing that

@MobiusHorizons
Copy link

Learned a lot just reading this thread!! There are a lot of good ideas happening here. Is there a way it can be preserved? If it were closed, it could still be linked to from a wiki or something.

@developit
Copy link
Owner

Heh - I think that's why we haven't closed it. Need to find a good home for these things, maybe in the wiki.

@notpushkin
Copy link

Another thing that I had in mind since I wrote arequests is this:

const api = Afetch({url: "https://api.github.com"});
let mdo = await api.users["mdo"].get();
let json = await mdo.json();  // or whatever you'd do with a regular Fetch object

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants