A REST API is a contract. The more predictable it is, the less your clients have to think, and the longer it survives without breaking changes.
Model resources, not actions
Use nouns and let HTTP verbs carry the intent: GET /articles, POST /articles, DELETE /articles/{id}. Reserve verbs in the path for genuine operations that are not resources.
Be consistent about the boring parts
- Return correct status codes (201 on create, 404 on missing, 422 on validation).
- Paginate every collection from day one.
- Shape errors the same way everywhere.
Version before you need to
Put /v1 in the path from the start. It costs nothing now and saves a painful migration the day you must change a response in a breaking way.