If we would like to create an API for the application, what are the advice on the approach? are we suppose to focus on designing with interface prior abstract classes ?
You normally focus on specific use cases that you would like your API to be able to support. One good book on API design is "Practical API Design" by Tulach - it's a bit dated but I think the material will still be relevant.