Hacker News new | ask | show | jobs
Show HN: Invoking web APIs as if they were JavaScript methods (github.com)
14 points by fmontesi 2854 days ago
3 comments

Could 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!