
Building an API in 60 seconds, without any server setup - hackerews
https://api.blockspring.com/blog/api-in-60-seconds
======
deadgrey19
I really don't understand what's happening here. I think we use the term "API"
and "server" differently. When I think of an API, I think of a library or
something that I can link to. For example the POSIX API, or the P-Threads API.
These are available in one way or anther from any language.

This seems to think very differently about APIs. As if APIs are somehow tied
to a specific language? When they use the term API, do they maybe mean
library?

I think that under the hood, the idea is that, if you want to do something, in
another language (rather than just writing it in the language) you somehow
generate a stub in both languages and then proxy through a (network?)
connection?

To make this more complex, it seems that the proxy connections are not just on
the local machine, but over the internet to another machine. Presumably you
have to pay for this?

Am I right? This seems like a lot of effort to go through just to avoid
figuring out how to do something directly. With really sucky performance
implications. I guess it depends on what you're doing. Most languages support
a foreign interface to C, so maybe that is a more sensible way to do this
rather than setting up "servers" and tunnelling commands and data back and
forth.

EDIT: I just had another look at the website. So, when they use the term API -
it would seem that they mean some sort of an HTTP based web interface? The
idea is that you have some kind of script that does something for you and you
can query it from you local script. I still don't understand why you'd want to
do this over running it locally?

~~~
tlrobinson
Huh? The term "API" is commonly applied to HTTP endpoints intended to be
consumed by other programs, aka "web services".

~~~
_dps
In context, you're right of course. But you might be underestimating the
number of non-web programmers who have this reaction. I know many such people,
and many have asked me "The term API predates the web; In what sense is this
an API?".

For such people, I propose the metaphor that HTTP APIs are a form run-time
linking where the root URL (api.example.com) is the "library" and the valid
URIs (api.example.com/list_of_cats) are the exported "symbols" you can
reference from your program. Performing a GET on such a "symbol" is like
dereferencing the pointer you get from calling dlsym. The 400 and 500 range
status codes are like dlsym's error codes: 404 is a failure to find the
symbol, 500+ is various run-time errors, etc.

~~~
deadgrey19
Thank you! Perfect response. I'm a systems programmer, mostly working in VHDL,
C and assembly. I use and write API's all the time. I've never used an "API"
over HTTP before.

I think the confusion comes from a slow divergence of terminology. Web
providers offered "API's" to allow people to access their services, these were
kind of API's in the sense that an application could use them. However, it
seems that for the web development community has begun to think that an API
and an HTTP based API are synonymous (they are not!). Hence my confusion here.

------
superuser2
I'm not sure I understand what this is. Free hosted PaaS for single files,
essentially? I know nothing about where the code is running? Is it performant?
Is it reliable? How are they covering server costs / at what point would I be
asked to pay, and how much?

~~~
hackerews
Hey superuser,

Great questions. Let me answer them one at a time!

Where is the code running? Every script run happens in its own sandbox on our
machines. We use docker, it's awesome. People are asking for dedicated
machines specifically for their company, and others are asking to hook into
their own machines. Once we figure out how people/companies want to use the
site, we'll put up some options for where code will be run. I'm totally open
to feedback and would love to hear what you think.

I'm measuring costs right now. But I'm seeing that when we get a fair pricing
model up - if you could hit these api's only when you need them, rather than
have a dedicated server for them, you'd save a money. A really different way
of looking at PaaS + Apis... and I'm super excited about it. Right now, I'm
just trying to collect as much awesome feedback as possible for use cases, and
then we'll have a better idea for how users would want to be charged. Right
now, people are asking for a simple request-based model. Would love your
thoughts on this as well.

Thanks again for the questions. You're awesome.

paul@blockspring.com 312.834.7265

~~~
whackedspinach
Paul,

How are you securing the Docker containers since Docker hasn't yet added user
namespaces?

~~~
hackerews
Containers open and close with every script run and then they're deleted.
Never reopened.

~~~
whackedspinach
Do you run the scripts as a specific user inside the container then? I was
under the impression that running untrusted code in Docker as UID 0 was not
yet safe.

------
rstoner
Dear Github.

Please buy these guys and enable this functionality for gists.

~~~
donpinkus
We could totally let people import a gist and instantly API it.

Do you have example gists you've want API'd? We could take a look tonight
about how to implement this

------
epaga
You guys need to chat with IFTTT - if IFTTT could ping an API I made and
trigger stuff with it, that would be incredibly powerful & awesome.

~~~
hackerews
We've thought about this and get excited. Great idea.

~~~
mayrun
What a great idea, please keep us updated.

------
jacquesc
Anyone know if this would work with Mailguns cool email signature parsing
library? [http://blog.mailgun.com/open-sourcing-our-email-signature-
pa...](http://blog.mailgun.com/open-sourcing-our-email-signature-parsing-
library/) as in, easily build an api for it?

~~~
blockspring
Talon is now supported. Feel free to make all the cool mailgun api's you want!

~~~
voltagex_
Maybe the paid version of your site could support virtualenvs.

~~~
hackerews
Super curious, what would you use the virtualenv for? Each script run happens
in its own container. Is it to import your own libraries that we don't support
yet?

~~~
voltagex_
> Is it to import your own libraries that we don't support yet?

Yeah. I don't have a use for this as-yet but I can see organisations wanting
to import their preconfigured envs in.

------
dheera
I'd be more interested in seeing an infrastructure for scraping where the API
functions are fixed, but the actual scraping functions are dynamically loaded
so that the API user doesn't have to maintain it or re-pull/re-fork/re-compile
when the website design changes.

Bonus points if one can make an ORM out of it, e.g.

    
    
        for article in get_api('reddit.com').todayilearned.filter('new').limit(100):
            ... do something ...
    

Where a call to get_api() dynamically fetches the latest scraping functions,
in case reddit's page design has changed.

Triple bonus points if the system can be designed in a de-centralized fashion
to defend against ToSes that try to disrciminate between human eyes and
machine eyes.

~~~
donpinkus
Hey dheera that's super interesting. Since it's about web scraping
specifically, I bet the guys over at Kimonolabs.com would be the experts on
that!

Or if someone on here knows how to do this, and wants to throw up an API on
Blockspring for it, we'd all love it :)

------
xmonkee
Care to give us a peek at how this works?

~~~
jkfoling
Also interested in how this works. Maybe the author can give some details how
he set up the service.

------
donniezazen
What are you options if a site/service doesn't provide an API? I am looking
into creating a third-party Android app for
[https://askbot.com/](https://askbot.com/) which is an open-sourced (GPLv3)
version of StackExchange-like website. Askbot has a limited read-only API. It
is written in Python and I am not sure how much work it would be to write APIs
for it.

------
JustARandomGuy
This looks like a great service!

Is there a way to sign up for a paid account or a credit system? I don't want
to burden you guys with the costs of my API requests.

~~~
hackerews
We should do an Ask HN about this :). Would love your feedback on what makes
most sense.

People have messaged me asking for pricing tiers based on rate limits / usage,
or purchasing company machines to run all apis from, or even paying for extra
privacy (like on github).

What's most fair / makes most sense for you?

~~~
JustARandomGuy
To be completely honest, I'm not sure. I would say charge by the total amount
of time the VMs have run, but I have no idea how the costing will work out.

Good luck!

~~~
blockspring
That's a great point. And since people aren't running dedicated machines, only
paying for the requests that happen, it could even be cheaper than spinning up
your own server. Interesting!

------
mentat
It would be sort of cool to implement cryptanalysis tools as APIs using this.
Like "submit your data and we'll tell you what it might be". I built some
tools in python the first time I was working on the Matasano crypto challenges
but Go is a better choice. Would be nice if it was supported.

~~~
hackerews
Will get you GO asap.

------
hackerews
People have asked for Javascript and Perl. Any other languages you'd want me
to add?

~~~
alvare
Haskell

~~~
codygman
If Haskell were on there, I'd at least transliterate the Python example from
the video as a contribution ;)

~~~
innguest
Another vote for Haskell.

~~~
hackerews
Language support is super easy to add. Any list of libraries you'd really want
with Haskell?

~~~
codygman
Some random highly used libraries:

containers, bytestring, mtl, text, transformers, time, array, aeson, split,
blaze-builder, blaze-html lens, safe, resourcet

I'm sure aeson examples would be very popular. mtl/transformers examples for
those who are getting to them in the learning process.

Here is a complete list of the top reverse dependencies for libraries on
hackage:

[https://docs.google.com/spreadsheets/d/1o7K_tEDIULPHNv8RpP0E...](https://docs.google.com/spreadsheets/d/1o7K_tEDIULPHNv8RpP0E3p34V0FzMBfhnTfiMNrZg3o/edit?usp=sharing)

~~~
hackerews
You are brilliant. Thank you so much.

------
eropple
So my buddy Sean (@tilmonedwards) just built something pretty similar as a
command-line app, just for yucks:

[https://github.com/seanedwards/svcizer](https://github.com/seanedwards/svcizer)

~~~
tlrobinson
_" The request body will be passed to stdin."_

 _" STDOUT and STDERR from cmd will be dumped to the response body."_

 _" HTTP headers and query parameters will be passed as environment
variables."_

Uhhh, your friend just reinvented CGI:
[https://en.wikipedia.org/wiki/Common_Gateway_Interface](https://en.wikipedia.org/wiki/Common_Gateway_Interface)

~~~
eropple
Yeah--that's neat, to me. :-) I've written against CGI before. The kicker to
me is that it converges back on what we'd already done. History is fun.

------
joeyspn
This is a really creative and interesting project... Will use it for sure

~~~
hackerews
Thank you! Let me know if I can help in any way...

Paul@blockspring.com

3128347265

------
giancarlostoro
I'm surprised they don't monetize this, I think it's really neat, especially
selling the solution for private use.

~~~
donpinkus
Truth is most people's APIs really cost us nothing to run, so we'd rather not
charge for it :P

I'm a really big believer in sites that provide a ton of utility for free, and
only charge you when you're actually costing the company something.

That said if you do want to use a ton of CPU, that gets expensive for us - so
we may make paid accounts for people that use CPU heavy API's. We realized
Blockspring would still be a lot cheaper than keeping your own EC2 server up
all the time, so that's sorta cool!

Also if you wanted it set-up locally at your company and 24/7 phone support
(from the two of us), we'd have a paid account to cover our time.

Obviously if you have ideas let us know!

------
jawbone
Thanks a lot for the link. Right at the time we are looking for resources to
build and figure out the structure for the APi :D

------
jacke
Check this out:
[https://github.com/hmarr/codecube](https://github.com/hmarr/codecube) 1\.
It's open source 2\. Put this on heroku and use it privately. 3\. Highly
stable(because it's write using golang, you can run millions of request, and
it's still work fine) ??? NONPROFIT

But project no longer in developing, so i guess maybe someone wants to
reanimate codecube? On weekends for example, contact me: iamjacke AT gmail.com

------
koesterd
I just reported a urgent bug via the feedback form because I couldn't find
your email. Please pay attention to it!

~~~
hackerews
Thanks for the report! We scrap down the docker container on each api run - so
it shouldn't be a problem.

~~~
sebbul
What's your latency on scraping down the container?

~~~
hackerews
containers go up and down almost instantly. time is either in the http request
or the actual script run.

------
mrstrawberry
Awesome service, can't wait to use this.

------
grimtrigger
Interesting. Whats a use case for this?

~~~
hackerews
I personally like the google reverse image search hack :).

I used to just run that python script manually on my computer. Now I can just
call it from my front-end js when users upload images and return back some
text about the image.

[https://api.blockspring.com/users/pkpp1233/blocks/5a1b66ef20...](https://api.blockspring.com/users/pkpp1233/blocks/5a1b66ef208007c51a45fda220dbe8db)

But you can do just about anything. Users have done r statistics from js. Or
python sentiment analyses (lots of good libraries there) whenever they get
user comments in their rails app.

~~~
makeee
Was just looking today if google had an api for reverse image search, which
they don't, so thank you :)

~~~
hmsimha
I imagine they have an undocumented api for reverse image search. The team at
Google has released this extension[1] for adding reverse image search to the
context menu, which is currently the only extension that enables reverse image
search for images only accessible while logged in (think if you want to
reverse image search a preview of an image someone emailed to you).

I was thinking about intercepting the requests it makes and making an open
source extension that does the same thing, but I haven't had the time yet.

[1] [https://chrome.google.com/webstore/detail/search-by-image-
by...](https://chrome.google.com/webstore/detail/search-by-image-by-
google/dajedkncpodkggklbegccjpmnglmnflm)

------
gear54rus
+1 for Good Will Hunting reference

~~~
hackerews
Thanks :). Didn't think anyone noticed!

~~~
donpinkus
Wait what? Where did we reference it I didn't even notice it :P

