abstract api & seprate bookShelf