This is very clearly written. A couple of notes though: if id is alphanumeric, then GET /blog/new and GET /blog/:id can be in conflict, because nothing prevents “new” from being a valid id. And I believe anything less than making it syntactically impossible asks for trouble.
Some ways to avoid ambiguous routes are:
GET /blog/+
GET /blog/@new
But maybe there is something more canonical?
Another problem is that PUT and DELETE can’t be used with HTML forms, only GET and POST. I guess, it needs to be said which routes are the classic web-pages, and which are for ajax (or API clients other than a web-browser). For example, prepending with /api can make things clear.