Ask HN: Best and Worst API Documentations?
Really trying to improve my company's docs and I am looking for some examples of what to do and what not to do. It's really tough gaging how helpful or easy your own docs are so it would help to compare them to what other developers prefer.
40 comments
[ 3.6 ms ] story [ 91.6 ms ] threadWorst: anything MS (excl. Github obv).
The more "core" Azure services are a bit better, but it seems to always be a struggle and searching for answers is always difficult because you have to scroll through a full page or more of Microsoft marketing pages before you reach either Reddit or stack exchange results with the answers you're looking for.
Weird example: recently I discovered Azure redis instances will drop idle connections after 10 minutes, but the network connection still stays open and your commands/queries will fail.
This seems to be a problem with modern docs but I find they're overly verbose and the focus is hello world tutorials to show off shiny things & advertise Azure, the quality tends to drop off from there.
I think good documentation is something I want to have open on the side to answer questions like:
* What module did I need again?
* How do I do X?
* Does this tool let me do X?
I'm going to go straight to tailwind, MDN, GitHub etc. MS documentation I'm going to google first because I ain't got time to read through a half dozen long form articles that might give me an answer. ASP.net? probably, Azure anything? I'll leave more confused and thinking about AWS...
I used to like DotNetPerls because it made me pause and smile with its strange almost zen-like analogies, but now it's gotten a lot more formal, which makes me a little sad.
For the worst ever in all of human history, I submit the official Unreal Engine docs. They never finished them, and they ain't gonna. If it didn't come with full source I'd never get anything done because I'm not about to sit through 100 hours of YouTube videos to find the details I need.
A lot of software relies on user-created documentation these days. And it's not even a decent wiki anymore. It's more likely to be YouTube and a Discord. Damn kids.
Worst: My god, look at Apple. Where's the documentation on MacOS?!
EDIT: One thing I would suggest is to find a balance between skimmable documentation (nobody READS anymore, we don't have time or patience for that) and explanation (extracted structure/data types alone aren't nearly enough). Also, code samples! Code samples all the way! These are very helpful particularly for people that don't speak English as their native language. It's one thing to skim some English documentation and not quite "get it", but a code sample illustrating usage in a simple context can go much, much further.
2) Don't name the input parameters the exact same as the variables, even though it reads nicer Class Pet: func pet(pet)
pet=Dog Pet.pet(pet) <----- whyyyyyyyyy
* Bugs in the implementation
* JSON looks like auto-translated XML without an XML
* Nothing about data types, values for an enum you could expect
On the flipside, Stripe's is one of the best. Although the only issue Ive seen is webhook signature code always uses their SDK which I don't always want to use, and webhooks can't be configured on a per-payment basis so if you have multiple systems on the same Stripe account, all of them get notified of everything (unlike other payment providers!)
- be meaningful. listWidget(str name): Returns a Widget is useless to me. 90% of api docs i see are like this, its evident they've been auto-generated and no effort had been made. Code samples help but really they are second order answers to the fundamental questions users have: why should I consume this function? How do I consume it? What should I expect? How to detect problems? And, hardest of all, when should I use something else?
- include an overview block at the start of every api definition, to orient the reader. What does this API do? What are the most important objects and calls? What limits and rules does the reader feed to know? Write at a lower reading level than you normally use to capture newbies and non native speakers.
- Meaningful code samples are great, but dont kid yourself. If the sample is unrealistic, particularly if you are eliding a difficulty that the real world practictioner is guaranteed to face, you are cheating yourself and them. Address it.
- make navigation easy. breadcrumbs, scroll to top, cross refs etc.
I've never found api docs that hit all of these, by the way.
Thanks in advance.
For example on a recent API that I documented this needed to include a complicated OAuth flow (involving Swedish BankID), creation of several orders, and only then listing the actual account details.
Ideally you'll have this as an explicit test case and hike appropriate excerpts directly into your documentation, ensuring that your example actually works even if the API changes! There's nothing more frustrating than minutely explicit demonstration code that doesn't reflect reality - and it's very common!
Edit: I love the way that Rust's documentation generator allows you to include code snippets that will cause the documentation generation to fail if the code doesn't work! https://doc.rust-lang.org/rustdoc/write-documentation/docume...
Also, in terms of tools for actually building documentation, I recommend looking at https://docusaurus.io/ for clean, customisable documentation.