The author has a poor understanding of HTTP and adjacent standards. I find it is so insufficient that he should not dispense advice yet, he must learn much more, especially about the essential yet completely unmentioned parts of a Web system: media types, hyperlinks, Link relations, cacheability. Critique:<p>2. ISO 8601 is a shit show of a standard. Last time I surveyed, there was not a single compliant implementation in the world. Recommend "Date and Time on the Internet: Timestamps" <<a href="http://rfc-editor.org/rfc/rfc3339" rel="nofollow">http://rfc-editor.org/rfc/rfc3339</a>> instead. This standard is public/not encumbered by stupid copy fees and is restricted to a much more reasonable profile that can actually be implemented fully and in an interoperable fashion.<p>4. Use `OPTIONS <i>` instead. <<a href="http://rfc-editor.org/rfc/rfc7231#section-4.3.7" rel="nofollow">http://rfc-editor.org/rfc/rfc7231#section-4.3.7</a>><p>5. This goes against the design of the Web. Do not version URIs. If the representation changes and is not backward compatible, change the media type instead, e.g. by adding a profile <<a href="http://rfc-editor.org/rfc/rfc6906" rel="nofollow">http://rfc-editor.org/rfc/rfc6906</a>>. You can serve multiple representations on the same URI and vary on the request headers (e.g. Accept-</i>).<p>6. HTTP already contains a customisable mechanism. Use the standard header <<a href="http://rfc-editor.org/rfc/rfc7235#section-4.2" rel="nofollow">http://rfc-editor.org/rfc/rfc7235#section-4.2</a>>, not the custom header `Api-Key` which is not interoperable.<p>7. "Don't use too many [HTTP status codes]": why? This opinion is not backed up with an explanation. The correct advice is: use as many status codes as arise from the requirements. `422 Unprocessable Entity` is useful in nearly every Web system.<p>8. What does "reasonable" mean? This lacks an explanation.<p>10. Use application/problem+json <<a href="http://rfc-editor.org/rfc/rfc7807" rel="nofollow">http://rfc-editor.org/rfc/rfc7807</a>> instead.<p>11. "It's a good idea to return the created resource after creating it with a POST request": why? This opinion is not backed up with an explanation. If you follow this advice, the user agent cannot programmatically distinguish between a representation reporting on the requested action's status, and the representation of the newly created resource itself. Use the Content-Location header <<a href="http://rfc-editor.org/rfc/rfc7231#section-3.1.4.2" rel="nofollow">http://rfc-editor.org/rfc/rfc7231#section-3.1.4.2</a>> to make that possible, use the Prefer header <<a href="http://rfc-editor.org/rfc/rfc7240" rel="nofollow">http://rfc-editor.org/rfc/rfc7240</a>> to give the user agent some control over which representation to respond with.<p>12. "Prefer PATCH over PUT": disagree, ideally you offer both since there is a trade-off involved here. The downsides of PATCH are not mentioned: the method is not (required to be) idempotent meaning it becomes moderately tricky to keep track of state, and the client is required to implement some diff operation according to the semantics of the accepted media type in the Accept-Patch header which can be difficult to get right.<p>13. Missed opportunity to advertise the OPTIONS method and related Accept-Post <<a href="https://datatracker.ietf.org/doc/html/draft-wilde-accept-post" rel="nofollow">https://datatracker.ietf.org/doc/html/draft-wilde-accept-pos...</a>> / Accept-Patch <<a href="http://rfc-editor.org/rfc/rfc5789#section-3.1" rel="nofollow">http://rfc-editor.org/rfc/rfc5789#section-3.1</a>> headers. A representation of a specific media type can self describe with the "type" Link relation <<a href="http://rfc-editor.org/rfc/rfc6903.html#section-6" rel="nofollow">http://rfc-editor.org/rfc/rfc6903.html#section-6</a>>.<p>14. Don't mix data with metadata. Use the Range header <<a href="http://rfc-editor.org/rfc/rfc7233" rel="nofollow">http://rfc-editor.org/rfc/rfc7233</a>> and next/prev Link relations <<a href="https://webconcepts.info/concepts/link-relation/next" rel="nofollow">https://webconcepts.info/concepts/link-relation/next</a>> instead.<p>15. Instead of complicating both server and client, the better idea is to simply link to related resources. We are not in the 1990s any more. A well written Web server offers HTTP persistent connections, HTTP pipelining, all of which make round-trips cheap or in the case of HTTP/2 server push, even unnecessary. Benchmark this.<p>1. + 9. betrays a weird obsession with naming. The advice is <i>not wrong</i>, but it shifts attention away from the genuinely useful areas that benefit much more from a careful design: the media types, the hyperlinks between and other hypermedia mechanisms for traversing resources (forms, URI templates). If an inexperienced programmer follows the advice from the article, he will the idea to spend lots of time mapping out resources in the identifier space and methods and possible responses for documentation purposes. This is both a waste of time because the single entry point is enough and the rest of the resources can be reached by querying the server via OPTIONS and traversing hyperlinks etc., and dangerously brittle because of strong coupling between the server and the client.