В настоящее время я пишу службу REST в приложении Symfony2. Примерно так выглядит один из моих контроллеров:
/**
* @Route("/account", defaults={"_format" = "json"})
*/
class AccountController extends APIController
{
/**
* @Route("/")
* @Method("get")
*/
public function listAction()
{
// process something here and return JSON-encoded response
}
}
Это работает нормально - то есть, если возникает какая-то проблема, и я выбрасываю HTTPException
, используется правильный error.json.twig
из TwigBundle Symfony2 и отображает ошибку HTTP как JSON.
Однако это не относится к нарушению требований маршрута, одним из которых является @Method("get")
. Например, если я кидаю POST
или PUT
по указанному выше URL-адресу, я все равно получаю правильный код состояния HTTP, но отображается с неверным типом содержимого (text / html вместо application / json).
Мне очень интересно, чтобы полный API возвращал ответы JSON и ничего больше - вопрос в том, как мне этого добиться? Должен ли я полностью пропустить требования к маршруту и проверить их самостоятельно (а затем в конечном итоге выбросить свои HTTPException
s)?