This seems to have popped around the net recently – not sure why as it’s from the Library-Centric Software Design conference in October 2005. Anyhow, it’s a great presentation from Joshu Bloch (of Effective Java fame) that covers all the bases in designing APIs.
I’ve done some of this myself and it’s definitely an art. Another related topic which is really only touched here is API evolution. There are some interesting schools of thought on this too which I’ll blog about another day.