Hacker News new | past | comments | ask | show | jobs | submit login
Hacker News API doesn't obey RFC 4627
2 points by dmjio on Oct 8, 2014 | hide | past | favorite | 10 comments
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




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)


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.


yea... that's another issue to add


The API returns JSON values per RFC 4627 and RFC 7159. null is a valid value. This allows clients to request only what they want:

Entire item: https://hacker-news.firebaseio.com/v0/item/8422599.json

Just one property: https://hacker-news.firebaseio.com/v0/item/8422599/kids.json

Also, please send API correspondence to api@ycombinator.com.


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.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: