Silex - Guzzle call to external API
I was able to improve on my previous code by making sure all the return statements were returning the same type of response (String / StatusCode). This allowed the 20 methods calling this one must smaller since I didn't have to check what response contain.    

private function getSIS($url, $session, Application $app)
{
    if($app['security']-&gt;isGranted('ROLE_SUPER_ADMIN'))
    {
        $client = new Client(['base_uri' =&gt; $app['fomservices']['sis']]);
        $token = 234561;

        // Calling the external API which multiple errors could occur.
        try {
            if (!empty($session)) {
                $response = $client-&gt;request('GET', $url.'/'.$session, [
                    'headers' =&gt; [
                        'token' =&gt; $token
                    ]
                ]);
            } else {
                $response = $client-&gt;request('GET', $url, [
                    'headers' =&gt; [
                        'token' =&gt; $token
                    ]
                ]);
            }
            return new Response($response-&gt;getBody(), 200);
        } catch (ClientException $e) {
            $response = $e-&gt;getResponse();
            return new Response($response-&gt;getBody()-&gt;getContents(), $response-&gt;getStatusCode());
        } catch (ServerException $e) {
            $response = $e-&gt;getResponse();
            return new Response($response-&gt;getBody()-&gt;getContents(), $response-&gt;getStatusCode());
        } catch (BadResponseException $e){
            $response = $e-&gt;getResponse();
            return new Response($response-&gt;getBody()-&gt;getContents(), $response-&gt;getStatusCode());
        }
    }

    return new Response("You don't have permission to access this!", 401);
}

public function getMedAction(Application $app)
{
    return $this-&gt;getSIS('med', '', $app);
}

public function getMedSessionAction($session, Application $app)
{
    return $this-&gt;getSIS('med', $session, $app);
}