Sean Coates

Webshell
is a console-based, JavaScripty web client utility that is great for
consuming, debugging and interacting with APIs.

I use Firefox as my primary browser.
The main reason I've been faithful to Mozilla is my set of add-ons. I use
Firebug regularly, and I'm not sure
what I'd do without
JSONovich.

Last year, as I built Gimme Bar's
internal API, I found myself using Curl,
extensively, and occasionally
Poster,
to test and debug my code.

These two tools have allowed me to interact with HTTP, but not in the most
optimal way. Poster's UI is clunky and isn't scriptable (without diving
into Firefox extension internals), and Curl requires a lot of Unixy glue to
process the results into something more usable than visual inspection.

I wanted something that would not only make requests, but would let me
interact with the result of these requests.

When working with Evan to debug a
problem one day, I mentioned my problem, and said "I really should build
something that fixes this." Evan suggested that such a thing would be
really useful to him, too, and that he'd be interested in working on
it.

I'd planned on building my version of the tool in PHP. Evan is… not a
PHP guy. He's a [whisper]Ruby[/whisper] guy.

If you've seen me speak at a conference, lately, you've probably seen
this graphic:

It shows that we have diverse roles in Gimme Bar, but everyone
who touches our code can speak JavaScript. (This is another, much longer
post that I maybe should write, but in the meantime, see this past
PHP Advent entry.)

Thus, Evan suggested that we write Webshell in JavaScript, with
node.js as our "framework." Despite the
aforementioned affinity for Ruby (cheap shots are fun! (-: ), Evan is a
pretty smart guy. It turns out that this was not only convenient, but
working with HTTP traffic (especially JSON results (of course)) is
way better with JavaScript than it would have been with PHP.

So, Webshell was born. If you want to see exactly what it does, you
should take a look at the
readme, which
outlines almost all of its functionality.

If you use curl, or any sort of other ad-hoc queries to inspect,
consume, debug or otherwise touch HTTP, I hope you'll take a look at
Webshell. It saves me
several hours every week, and most of our Gimme Bar administration is done
with it. Also, it's on GitHub so please
fork and patch. I'd love to see pull requests.