How Did REST Come To Mean The Opposite of REST?

Content

Carson Gross

July 18, 2022 You are wrong

I am getting frustrated by the number of people calling any HTTP-based interface a REST API. Today’s example is the SocialSite REST API. That is RPC. It screams RPC. There is so much coupling on display that it should be given an X rating.

What needs to be done to make the REST architectural style clear on the notion that hypertext is a constraint? In other words, if the engine of application state (and hence the API) is not being driven by hypertext, then it cannot be RESTful and cannot be a REST API. Period. Is there some broken manual somewhere that needs to be fixed?

–Roy Fielding, Creator of the term REST

_   REST APIs must be hypertext-driven_

REST doit être le terme technique le plus largement mal utilisé de l'histoire de la programmation informatique.

I can’t think of anything else that comes close.

Today, when someone uses the term REST, they are nearly always discussing a JSON-based API using HTTP.

When you see a job post mentioning REST or a company discussing REST Guidelines they will rarely mention either hypertext or hypermedia: they will instead mention JSON, GraphQL(!) and the like.

Only a few obstinate folks grumble: but these JSON APIs aren’t RESTful!

In this post, I’d like to give you a brief, incomplete and mostly wrong history of REST, and how we got to a place where its meaning has been nearly perfectly inverted to mean what REST was original contrasted with: RPC.

#Where Did REST Come From?

The term REST, short for REpresentational State Transfer, came from Chapter 5 of Fielding’s PhD Dissertation. Fielding was describing the network architecture of the (then new) world wide web, and contrasting it with other possible network architectures, particularly RPC-style network architectures.

It is important to understand that, at the time of his writing (1999-2000), there were no JSON APIs: he was describing the web as it existed at that time, with HTML being exchanged over HTTP as people “surfed the web”. JSON hadn’t been created yet, and broad adoption of JSON was a decade off.

REST described a network architecture, and it was defined in terms of constraints on an API, constraints that needed to be met in order to be considered a RESTful API. The language is academic, which has contributed to the confusion around the topic, but it is clear enough that most developers should be able to understand it.

#The Crux of REST: The Uniform Interface & HATEOAS

REST has many constraints and concepts within it, but there is one crucial idea that I believe is the defining and most distinguishing characteristic of REST, when contrasted with other possible network architectures.

This is known as the uniform interface constraint, and more specifically within that concept, the idea of Hypermedia As The Engine of Application State (HATEOAS) or as Fielding prefers to call it, the hypermedia constraint.

In order to understand this uniform interface constraint, let's consider two HTTP responses returning information about a bank account, the first in HTML (a hypertext) and the second in JSON:

#An HTML Response

HTTP/1.1 200 OK
<html>
 <body>
 <div>Account number: 12345</div>
 <div>Balance: $100.00 USD</div>
 <div>Links:
 <a href="/accounts/12345/deposits">deposits</a>
 <a href="/accounts/12345/withdrawals">withdrawals</a>
 <a href="/accounts/12345/transfers">transfers</a>
 <a href="/accounts/12345/close-requests">close-requests</a>
 </div>
 <body>
</html>

#A JSON Response

HTTP/1.1 200 OK
{
 "account_number": 12345,
 "balance": {
 "currency": "usd",
 "value": 100.00
 },
 "status": "good"
}

The crucial difference between these two responses, and why the HTML response is RESTful, but the JSON response is not, is this:

The HTML response is entirely self-describing.

A proper hypermedia client that receives this response does not know what a bank account is, what a balance is, etc. It simply knows how to render a hypermedia, HTML.

The client knows nothing about the API end points associated with this data, except via URLs and hypermedia controls (links and forms) discoverable within the HTML itself. If the state of the resource changes such that the allowable actions available on that resource change (for example, if the account goes into overdraft) then the HTML response would change to show the new set of actions available.

Summary
Carson Gross expresses frustration over the misuse of the term "REST API," arguing that many HTTP-based interfaces, such as the SocialSite API, are actually Remote Procedure Calls (RPC) rather than true RESTful APIs. He emphasizes that REST, defined by Roy Fielding, requires hypertext to drive application state, meaning that if an API does not utilize hypertext, it cannot be considered RESTful. Gross highlights the distinction between REST and RPC by comparing two types of HTTP responses: one in HTML, which is self-describing and allows clients to navigate through hypermedia links, and another in JSON, which requires prior knowledge of the API and is thus not self-describing. He notes that the industry has largely adopted JSON APIs as RESTful, despite their RPC nature, leading to a significant misunderstanding of REST's principles. The article traces the evolution of this confusion back to the early 2000s, when RPC protocols like XML-RPC gained popularity alongside AJAX, ultimately overshadowing the original intent of REST as a hypermedia-driven architecture.