обо всем по порядку.
Вопрос о том, является ли дизайн (или вообще что-то) «хорошим», зависит от того, как вы определяете «добро». Типичными критериями являются производительность, ремонтопригодность, масштабируемость, тестируемость, возможность повторного использования и т. Д. Было бы полезно, если бы вы могли добавить некоторые из этого контекста.
Сказав это ...
Это хорошее использование API
Обычно хорошей идеей является отделение бизнес-логики от логики представления и логики сохранения данных. Ваш дизайн делает это, и поэтому я был бы счастлив назвать это "хорошо". Вы могли бы взглянуть на формальный шаблон проектирования, чтобы сделать это - контроллер представления модели, вероятно, является текущим значением по умолчанию, особенно. для веб-приложений.
Это хорошая идея, чтобы запустить весь сайт через API
Ну, это зависит от приложения. Полностью возможно написать приложение полностью на Javascript / Ajax, но есть проблемы с совместимостью браузеров (особенно для старых браузеров), и вам необходимо создать поддержку для вещей, которые пользователи обычно ожидают от веб-приложений, таких как глубокие ссылки и удобство для поисковых систем. Если у вас есть хорошо продуманный API, вы можете выполнить генерацию страниц на сервере, если это облегчает задачу.
Какие варианты безопасной аутентификации у меня есть, используя API (и по какой-то причине я предпочитаю не использовать HTTPS)
Сложный вопрос - с этим типом приложения вы должны различать аутентификацию пользователя и аутентификацию приложения. Для первых, OpenID или OAuth, вероятно, являются доминирующими решениями; для последнего взгляните, как Google требует, чтобы вы зарегистрировались, чтобы использовать их API Карт.
В большинстве веб-приложений HTTPS используется не для аутентификации (доказывая, что текущий пользователь является тем, кем они говорят), а для шифрования. Два связаны, но ни в коем случае не эквивалентны ...
Любые альтернативные подходы, которые я не рассматривал
Возможно, это больше подходит под вопрос 5 - но, по моему опыту, разработка API - это довольно эзотерический навык - дизайнеру API сложно точно предсказать, что клиент API будет нуждаться. Я бы серьезно подумал о написании приложения без API для вашей первой клиентской платформы и позже выделю API - таким образом, вы создаете только то, что вам нужно в первом выпуске.
Какие потенциальные проблемы, которые я не учел, могут возникнуть при использовании этого подхода
Управление версиями имеет большое значение для API - после того, как вы создали интерфейс, вы почти никогда не сможете его изменить, особенно с несколькими клиентами, которые вы не контролируете. Я бы встроил управление версиями как концепцию первого класса - с помощью RESTful API вы можете сделать это как часть URL.