HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
for-GET
http-decision-diagram
CoffeeScript2015–2025
for-GET / http-decision-diagram

http-decision-diagram

An activity diagram to describe the resolution of HTTP response status codes, given various headers.

11Distinct people
27Mentions
1Explicit recommenders
3.7KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

An activity diagram to describe the resolution of HTTP response status codes, given various headers.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

For HTTP I highly recommend https://github.com/for-GET/http-decision-diagram/blob/master... Scroll to Overview and then there are links to each section in the diagram

dmitriid used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year27 dated mentions

Observed mentions: 2015-01-26 08:10:07 UTC to 2025-07-09 14:53:13 UTC.

02462015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 7 mentions; 2 submissions, 5 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC725
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC202
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC413
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC101
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC312
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC303
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC202
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC101
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC101
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC202
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101

What Hacker News says

27 sources
> but the HATEOAS detail ends up having no practical value and creates more problems than the ones it solves. Only because we never had the tools and resources that, say, GraphQL has. And now everyone keeps re-inventing half of HTTP anyway. See this diagram https://raw.githubusercontent.com/for-GET/http-decision-diag... (docs https://github.com/for-GET/http-decision-diagram/tree/master...) and this: https://github.com/for-GET/know-your-http-well
In Most RESTful APIs aren't really RESTful
> REST in practice just means following HTTP semantics. If that were true, it would be awesome. Because full HTTP semanics are quite intricate, and cover a lot - HTTP decision diagram: https://github.com/for-GET/http-decision-diagram (full docs: https://github.com/for-GET/http-decision-diagram/blob/master..., just the PNG: https://camo.githubusercontent.com/c26df6d372790e9f24d7e16d2...) - Know your HTTP well: https://github.com/for-GET/know-your-http-well
In It's time to put REST to rest
webmachine, mochiweb etc. come from Erlang. webmachine is one of the earliest libraries I'm aware of that tried to think carefully about HTTP semantics and structured it's work with restful APIs (or web requests in general) according to an actual diagram that you can see here: https://github.com/basho/webmachine/blob/develop/docs/http-h... There's an expanded and re-worked version that builds on this here: https://github.com/for-GET/http-decision-diagram/tree/master... (follow the links to system, request etc. to see the reasoning and references for each step)
In Best practices for REST API design (2020)
> They were not in spec because the spec doesn't say anything over which medium If not the spec, then original documentation. GET is a late add-on. > How do cache headers not work well with GraphQL GET requests? In REST: - a resource is uniquely identified by it's URI - when the server sends back cache headers, any client in between (any proxies, the browser, any http clients in any programming language etc.) can and will use these cache headers to cache the request In GraphQL GET: - http://myapi/graphql?query={user{id,name}} and http://myapi/graphql?query={user{name,id}} are two different requests - it gets worse for more complex queries, especially if they are dynamically constructed on the client - each of those is viewed as a separate query with separate caching - cache normalisation and query normalisation are a thing in the graphql
Read the rest
world (and non-existent in REST) because of that. That's a yet another layer of complexity that you have to deal with > And what exactly are those benefits? I'm here defending GraphQL yet none of the downsides of REST are being taken into account. I wish anyone was willing to discuss the downsides of GraphQL. Bashing REST is the norm, but GraphQL is the holy grail that accepts no criticism. Benefits of REST over GraphQL, off the top of my head: - it's HTTP, plain and simple. So everything HTTP has to offer is directly available in REST. See this HTTP decision diagram [1] - caching doesn't require you to normalise and unpack every single request and response just to figure out if something is cached - You know your requests, so you can provide optimised queries, resolution strategies, necessary calls to external services as required by the call > There are tools like Postgraphile that solve this. It converts your GraphQL query into one efficient database query. I'd love to see that proven for any sufficiently complex and large database. > And what prevents anyone from hammering a REST API? No ad-hoc queries prevents anyone from hammering a REST API that you can specifically tune to the specific request and data you need. GraphQL requires significantly more care especially if you're not running it on just one database. And even then, oops, joins: https://news.ycombinator.com/item?id=25014918 And we're back to requiring the graphql server to be able to limit recursion depth, query complexity, etc. etc. [1] https://github.com/for-GET/http-decision-diagram/tree/master...
In Go in Production – Lessons Learned
On top of what others have already said: GraphQL is a "clean break" that breaks with everything: idempotency (POST requests are not idempotent), caching (POST requests cannot be cached), version control and partial updates (GraphQL eschews ETags), etc. etc. etc. There is value in underlying protocols and there's value in using those protocols. GraphQL servers end up re-implementing, poorly, half of HTTP, and patting themselves on the back for it. Edit: for those interested, here's HTTP decision diagram that REST takes full advantage of: https://github.com/for-GET/http-decision-diagram/tree/master...
In The land before modern APIs
> My main qualm about REST is the number of inputs for doing something: Path variables, query variables, POST input, headers and for shits and giggles the Http METHOD. As a sibling comment has already extensively described why this is the way it is, I want to add one more thing: REST is a set of principles leveraging what already exists in HTTP. And HTTP gives you a lot. Here's an extensive HTTP decision diagram with links to explanations on basically everything: https://github.com/for-GET/http-decision-diagram/tree/master... Caching? HTTP got you covered. Editing conflicts? HTTP got you covered. A decision path for auth? HTTP got you covered. No-op requests? HTTP got you covered. Meanwhile GraphQL libs are busy reimplementing half of HTTP spec inside a single POST request.
In A REST View of GraphQL
REST in many ways is just a way to structure how you work over HTTP. Because HTTP is huge and allows you a ton of stuff out of the box if done properly. See this HTTP decision diagram: https://raw.githubusercontent.com/for-GET/http-decision-diag... and the documentation for it: https://github.com/for-GET/http-decision-diagram/tree/master... Any structured approach is difficult and prone to errors. People who so often jump onto the REST bandwagon often have poor to no understanding of what REST is, of what HTTP is, and how it all works.
In REST is the new SOAP

Showing the 15 most recent of 27 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.