Recently I discovered an interesting video for all of us aspiring software architects on Google Video. As part of the "Google Tech Talks" series, Joshua Bloch talks about "How to Design a Good API and Why it Matters". Being one of the main architects of Java (among others, he designed the Collections framework), Bloch undoubtedly has lots of experience on the subject.
The talk covers many different aspects in API design and contains examples of good practice and common mistakes. Many of the principles and guidelines discussed aren't new, but you rarely see so many of them summarized.
Unfortunately, he runs out of time somewhere before exception design, but the slides can be found online and are also very useful for later study.