Qual a diferença entre api, biblioteca e framework?

O que é e para que serve cada um, alguém pode me explicar ?