I am using an PHP MVC framework (Yii, but my question could apply to most MVC frameworks) to create a project that should include a web application (website) and RESTful web service. I am facing an early design decision on how to logically separate the application and service logic. Here are some true facts:

* The web app and web service will share a lot of functionality and only differ in rendered format (`View` vs JSON)...
* ...But, the web app and web service will have some unique features (ie, there will be things that the web app does that the service does not, and vice-versa)

Here are my desires:

* I would like to share the common functionality's implementation as much as possible
* I do not want the `Controller` to become unwieldy as a result of combining web service/web application logic
* I have a a *slight* distaste for creating separate web service and web app controllers, especially when they overlap in `Action`s (other than the rendered format)
* I do not want to have the web site consume the web service unless it is really a necessary design decision; I will lose out on a lot of built-in features that use database interfaces and/or have to create classes that conform to available `IDataSource` and other such interfaces by hooking it up to the web service; also there could be a slight performance decline.

I have thought about it a bit and come up with some solutions below. Please let me know which of these you think would meet my wants *or* let me know if my wants are not reasonable/counter-productive.

1. Implement completely separate controllers for `WebApp` and `WebService` (modularize the two so that they share no code)
2. Implement separate controllers for `WebApp` and `WebService`, but create methods that do the heavy lifting and call those methods to share implementation - for example, if I wanted to do a `item/findBySomeCrazyCriteria` I would route to the appropriate controller depending on the URL, but each controller would reference some `FindItemsBySomeCrazyCriteriaFunction()` defined elsewhere.
3. Make the web app consume the web service (which would require me to expand the planned functionality of the service)
4. Implement one controller for both `WebApp` and `WebService`, which extends from a `BaseController` that includes generic hooks for `REST` type stuff in terms of $this->getModel()` and use overrides where necessary
5. Anything else

Although my question is related to Yii, I feel like this must have come up in the past for many developers. I would like to know what you did/what you recommend to move forward. I am concerned that if I choose the wrong approach I will "break MVC" or somehow regret it later.