Большинство проектов разрабатывается так. Есть некая HTML форма на (GET) example.com/signup, некая обработка запросов на (POST) example.com/signup (с возможным редиректом на GET). И отдельный REST API: example.com/api/signup, возвращающий (а иногда и принимающий) JSON.
Почему бы не объединить обе части, возвращая данные в заголовках? Посылаете вы «username», «fullname», «email», «password» на example.com/signup, а оно рендерит не просто ответ сервера в виде HTML (для браузера), но и дублирует необходимые данные в виде заголовков (для JS и мобильного приложения):
-------- start of headers
...
status: error
errors.fullname.text: Fullname cannot be empty.
-------- end of headers
...
<strong>Fullname cannot be empty.</strong>
<input name="fullname" type="text" class="error" value="">
...
Таким образом, нет необходимости отдельно продумывать и пилить API. Умный фреймворк (на самом деле даже простая библиотека) сможет автоматизировать всё это так, что всё будет происходить под капотом.
Какие тут подводные камни?