yo creo es una buena idea tener una interfaz de bajo nivel para la aplicación que puede usar sin un navegador per se, y que el sitio debe usar esa interfaz para hacer sus cosas.
Esa interfaz no tiene por qué ser la API en sí misma, podría ser una capa de menor nivel que la API, y es utilizada tanto por la API como por el sitio web de producción.
En general, es una mala idea si la API simplemente duplica el sitio web.
es decir, el siguiente es mala
# 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)