Jump to content
Larry Ullman's Book Forums
Sign in to follow this  
Jonathon

Organization For Rest

Recommended Posts

Hi Larry

 

How would I organise my folders for a rest application. It's more so that I'll have an existing website and then want to make an app version of it or provide some functionality through an app.

 

So I'm taking that I would need to create rest controllers to do the work that my websites controllers currently do? But then I wasn't really sure what else?

 

Is it better to just build the app controllers as its own website so to speak on a different domain?

Share this post


Link to post
Share on other sites

On a related note. I found a good app called PostMan that's a Chrome plugin. It's quite good, so thought it might be of use to others.

 

I also decided to just build the REST application on a separate domain.

Share this post


Link to post
Share on other sites

It's quite normal to build the REST api alongside your site. It seems api.domain.com or domain.com/api/ are pretty normalt structures. While that is the most common, I myself prefer the sort of structure Rails use. This has the added benefit of allowing you to build everything once only. I don't know how easy this is to do with YII, but that's how I build in Symfony. Looking quickly at YII, the same should be possible there.

 

Some of the reason why this is so easy are some incredible bundles like the FOSRestBundle and JMSSerilizerBundle. By defining core configuration for you app, you're controllers can be configured by annotations only.

 

Here's an example of that incredible power:

/**
 * Class MatchController
 * @package JCN\Bundle\ApiBundle\Controller
 *
 * @Route("/match", name="api-match")
 */
class MatchController extends FOSRestController
{
    ...

    /**
     * @Route("/next", name="api-match-next")
     * @View(templateVar="match")
     * @Template
     */
    public function nextAction()
    {
        $em = $this->getDoctrine()->getManager();
        $next = array_pop($em->getRepository('JCNApiBundle:Fixture')->nextMatch());

        return array("match" => $next);
    }

    ...
}

Try the following Curl calls in the command line:

curl -i -H "Accept: application/json" http://jcn.juvenorge.com/api/match/next

curl -i -H "Accept: application/html" http://jcn.juvenorge.com/api/match/next

xmllint --format | curl -i -H "Accept: application/xml" http://jcn.juvenorge.com/api/match/next

 

To explain some of the magic here, those annotations gets parsed. When that is done, real objects are created behind the. scene, and does all the magic of handling format parsing, view rendering and routing. I can't really explain how much I love Symfony. :)

 

Edit: I want to add that this structure is not without it's drawback. If you publish your API and want other people using it, this kind of structure is terrible. Then it's more maintanable to offer api.domain.com/v1/action so BC are not broken every time you change something. This API will be for internal use in my own application.

Share this post


Link to post
Share on other sites

Hi Thomas

 

I was going to ask you about the annotations. That is pretty impressive. I have only just started with REST as a subject and I am of course doing it in my trusty Yii2. http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html

 

I decided in the end to build on a separate domain, mainly to keep everything separate and start small and incremental in REST terms. Although I do see the drawbacks of having to duplicate at least aspects of the actual domain. There isn't a huge amount to my app really, more so pulling data that is easily provided naturally in Yii and a few other custom functions.

Share this post


Link to post
Share on other sites

Sorry for the delay, Jonathan! I'd definitely do the API on a subdomain of the same URL or on another URL. It is a duplication of effort, yes, but it allows you to develop the API as a separate product. You can then make decisions about putting different functionality in your API than you have in your main site, or vice versa. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...