Entonces, digamos que voy a construir un clon de Stack Exchange y decido usar algo como CouchDB como mi tienda backend. Si uso su autenticación incorporada y la autorización a nivel de base de datos, ¿hay alguna razón para no permitir que el Javascript del lado del cliente escriba directamente en el servidor CouchDB disponible públicamente? Dado que se trata básicamente de una aplicación CRUD y la lógica de negocios consiste en "Solo el autor puede editar su publicación" No veo la necesidad de tener una capa entre el contenido del lado del cliente y la base de datos. Simplemente usaría la validación en el lado de CouchDB para asegurarme de que alguien no está colocando datos de basura y asegurándome de que los permisos se configuren correctamente para que los usuarios solo puedan leer sus propios datos de _usuario. El renderizado se haría del lado del cliente por algo como AngularJS. En esencia, puedes tener un servidor CouchDB y un montón de páginas "estáticas" y estarás listo. No necesitaría ningún tipo de procesamiento del lado del servidor, solo algo que pueda servir las páginas HTML.
La apertura de mi base de datos al mundo parece incorrecta, pero en este escenario no puedo pensar por qué mientras los permisos se configuren correctamente. Va en contra de mi instinto como desarrollador web, pero no puedo pensar en una buena razón. Entonces, ¿por qué es una mala idea?
EDIT: Parece que hay una discusión similar aquí: Escribiendo Web "server less" aplicaciones
EDITAR: ¡Fantástica discusión hasta ahora, y aprecio los comentarios de todos! Siento que debería agregar algunas suposiciones genéricas en lugar de mencionar a CouchDB y AngularJS específicamente. Así que asumamos que:
- La base de datos puede autenticar usuarios directamente desde su tienda oculta
- Todas las comunicaciones de la base de datos se realizarán a través de SSL
- La validación de datos puede (pero ¿quizás no debería?) ser manejada por la base de datos
- La única autorización que nos importa más que las funciones de administración es que solo se le permita a alguien editar su propia publicación
- Estamos perfectamente bien con que todos puedan leer todos los datos (EXCEPTO los registros de usuarios que pueden contener hashes de contraseña)
- Las funciones administrativas estarían restringidas por la autorización de la base de datos
- Nadie puede agregarse a un rol de administrador
- La base de datos es relativamente fácil de escalar
- Hay poca o ninguna lógica empresarial verdadera; esta es una aplicación básica de CRUD