Show HN: Invoking web APIs as if they were JavaScript methods
github.comCould you put an example of a real web API (maybe the github API) and show how you would call it with your library ?
I can give you one by reusing a bit the Telegraph example I have in the Jo tutorial: http://fmontesi.github.io/2018/08/16/jo.html
To create an account:
Jo.createAccount( { shortName: "Homer" } ) .then( response => { alert( response.result.accessToken ); } );
To create a page:
Jo.createPage( { accessToken: token, title: "Title", content: "Content" } ) .then( response => { alert( response.result.url ); } );
This assume that those operations are available at the originating web server. If instead you're offering "Telegraph" as a subservice, then instead of Jo you have to write Jo("Telegraph"), the rest is the same.
I hope this clarifies things a bit.
Here's also Github. It's resource-oriented instead of verb-oriented (like Telegraph), so we use Jor instead of Jo (both are provided by the same library).
Jor["users/fmontesi/repos"].get().then( response => ... );
Notice that using ["users/fmontesi/repos"] is the "alternative" syntax. If the resource path is a valid method name in JavaScript, e.g., "/users", you can just write this:
Jor.users.get().then( response => ... );
I'm still wondering what's the best way of offering resource paths. Using a string is fine, but another option would be to have an extension of JavaScript, like JSX in react, but that would add a dependency (on Babel, for example). So we could do something like:
Jor.users/fmontesi/repos.get().then( response => ... );
Another option could be to use an in-between method, for example:
Jor.users._.fmontesi._.repos.get().then( response => ... );
But this looks a bit clunky. So the design space is a bit larger here. Mumble mumble. :-)
By the way, here's the Telegraph API documentation, for reference: https://telegra.ph/api
What I wrote in my reply refers to that.
ok, makes more sense now. well done.
A small library I made for fun. It's very early stage and I wanted to keep things simple, so it does not use any other established libraries (yet).
Really cool, I’m impressed!