简体   繁体   中英

Symfony2 Web Service

I'm currently designing a new web application based on Symfony Framework that will serve both web and mobile accesses. For illustration purposes I will use the default AcmeDemoBundle from Symfony`s framework to elaborate my question.

So, DemoBundle gives me the following route:

/hello/{name}

So far so good. Now, I want to implement an API in this project that will serve mobile apps, so the route for the same controller as the route above whould be, for instance:

/api/v1/hello/{name}

My doubt is: what's the best way of doing that without replicating code? I intend to use the FOSRestBundle for the API and I know that he handles rendering HTML views to, but I'd like to separate the API routes from the web as I put before. Maybe should I create a new bundle for the API?

Create a bundle for the API is not a good practice for the simple reason that you can't easily re-use the bundle in an other project.

For example, you create PostBundle and his API bundle, APIPostBundle for your A project. If you want to use that bundle for a B project, you need PostBundle and APIPostBundle. You created dependency between two bundles and it's a bad practice (Component-Based Development).

So, you have to generate an independency bundle with a strength architecture who can allow you less modification if you have to. Use a service for the logical instructions. Then, the controller/APIController can manage the route and will call the service methods. By that way, you can just modify the service without editing the controllers.

So, your architecture looks like that:

PostBundle
  Controller
    - PostController
    - APIPostController 
  Service
    - PostService
    - PostServiceInterface

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM