Hacker News API doesn't obey RFC 4627

2 points by dmjio ↗ HN
Normally, I would post this on the github issue tracker, but it does not exist. See https://github.com/HackerNews/API.

The API returns "null" when an "Item" doesn't exist.

Example: https://hacker-news.firebaseio.com/v0/item/1607092358902384905.json?print=pretty

RFC 4627 specifies that the returned JSON must be either an object or an array. This is neither. Please help. Thank you.

Suggestion: Instead of "null", can you make it"{ \"item\" : null }" ?

Warmest Regards

12 comments

[ 4.8 ms ] story [ 47.7 ms ] thread
Isn't null an object?
The RFC says all JSON text must be an array or object, null is a value. JSON text is made up of JSON values.

per the RFC,

"JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays)."

"An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array."

Hrmm. Later on it is explained:

2.1. Values

   A JSON value MUST be an object, array, number, or string, or one of
   the following three literal names:

      false null true


... so what you're receiving is technically a valid JSON value according to the RFC, no?

(I am so sorry for being this pedantic - but that RFC is marked 'informational', it's not actually a standard so much as a suggestion, and even worse, RFC 7159 obsoletes it and is an IETF standards track document - check out http://tools.ietf.org/html/rfc7159. The ambiguity is definitely removed in the updated version.)

If I'm reading it correctly: "null" would be a valid value, but a key/name would still need to be specified. So a blank document with the word "null" on it is invalid because the value of null has no key... but again, I may be reading it wrong.
{"key": null}

vs

null

I'm pretty sure they're both valid.

(comment deleted)
(comment deleted)
I'm more surprised that they're returning a 200 when an item doesn't exist. If they'd just return a 404, per usual, the content of the body wouldn't really matter. (in my opinion)
yea... that's another issue to add
I would argue a 404 is not proper in this case and a 200 is more correct and valid.

The URI exists, the requested record/document does not, hence the successful response with no return.

That's an interesting way to look at it. I can definitely see your point, thank you.