ForwardSlash: taking back the RESTful operator
The Ruby ecosystem has seen its fair share of HTTP clients. From the built-in Net::HTTP, to the various libcurl bindings, to Faraday, which lets applications switch between backends as they please.
All of them have one thing in common though: you have to write code to use them.
# Ugh, all this code
Net::HTTP.get_response(URI("http://ifconfig.me/ip"))
When you think about it, HTTP is all about URLs. What if the URL was the code?
http://ifconfig.me/ip
Introducing ForwardSlash
ForwardSlash is a new library, built on top of Net::HTTP, that does away with all the ceremony by adding language-level support for REST to Ruby.
It does this by introducing REST literals. Rather than using strings to represent the URL we want to fetch, the URL becomes a first-class citizen of the code.
Reclaiming the symbol
For centuries, a bunch of maths nerds have claimed sole usage of the forward slash.
If we should successfully construct a machine on which to perform computation, yet lack the foresight to include an input for the division symbol, I propose we repurpose the humble forward slash, which is sure to be present.
– Charles Babbage, 1857
If ForwardSlash was going to be a reality, we would have to reclaim the /
symbol for its real purpose: REST.
Through Ruby’s syntactic flexibility, we were able to achieve just that.
In action
By applying /
, known as the RESTful operator, to domains, we are able to fetch the resources hosted on those domains. As we know, RESTful resources can be nested, so to support this, the operator can be applied repeatedly:
http://example.com/nested/resource
Once the end of the URL is reached, ForwardSlash makes a HTTP request, and stores the response body in the result
variable. Automatically storing the result eliminates two problems: variable naming, and the fact that attempting to assign the result of a REST literal is a syntax error in Ruby.
Let’s do this
Enough chat. From today, you can install ForwardSlash and include it in your apps. Simply add it to your Gemfile, include it in your class, and you’ll literally be writing REST:
class CurrentIp
include ForwardSlash
def self.print
http://ifconfig.me/ip
puts result
end
end
Why let maths nerds have all the fun?