Я думаю, что это хорошая идея - иметь низкоуровневый интерфейс для приложения, который вы можете использовать без браузера как такового, и что сайт должен использовать этот интерфейс для своей работы.
Этот интерфейс не обязательно должен быть самим API, это может быть уровень ниже уровня API, который используется как API, так и рабочим веб-сайтом.
Как правило, плохая идея, если API просто дублирует сайт.
То есть, следующее плохо
# hypothetical example of bad duplication
def website_update_blog_post(request):
user = request.username()
ensure_logged_in(user)
post = Posts.objects.upsert(request.post_title, request.post_body)
trigger_notifications(post)
.....
def api_update_blog_post(user, password, title, body):
verify_login(user, password)
post = Posts.objects.upsert(title, body)
trigger_notifications(post)