I don't believe there to be a correct answer here. I personally have gone back and forth on how to have my web services interact with my models. But I can provide you with a few pointers:
- CustomerManager is overkill. The Customer model is responsible for managing itself -- you can place Customer-related methods inside of it. You don't need a separate object here.
- I typically use a super-class for my models. So, for example, you could have a class called ApplicationModel which Customer and all of your other models will inherit from. This is a great way to DRY up the code in your models. If you do decide to have network-related code in your models, I would suggest placing it in this super-class. That way if you need to make changes to the way the web services work, you only need to change code in 1 place.
- In general, I would suggest keeping network-related code separate from your models. I like to have my networking logic as isolated as possible. Network-related code is prone to change, and you want to minimize the number of places that networking changes impact your code. For example, I usually create a class that services as an API wrapper and it gives a public interface for making API calls. This class is also responsible for parsing the responses of those methods & interfacing with the models (i.e. parsing a JSON custom array and interfacing with Customer to add those objects to the database).