¿Dónde deberíamos agregar lógica de negocios en una aplicación web: en el lado del cliente o del servidor?

tl: dr depende

De hecho, es cierto que hay algoritmos en los que ha trabajado una empresa que deberían protegerse de la competencia; sin embargo, para muchas empresas, lo que mantienen en el lado del servidor no tiene tanto valor como creen. Daré un ejemplo de mi carrera:

Trabajé en un sitio web de seguros de automóviles donde los usuarios tienen que pasar por un proceso de cotización de varias páginas para enviar una cotización. Las respuestas de las páginas anteriores determinarían cuál sería la página siguiente (por ejemplo, ¿especificó varios controladores en su política? Si es así, se mostrará una página de controlador adicional)

La idea de poner toda esta lógica en javascript en una aplicación de una sola página fue rechazada porque daría el código del proceso de cotización a la competencia. Por lo tanto, esta parte de la lógica empresarial se mantuvo en el lado del servidor por “seguridad”. Siendo realistas, este es un ejemplo de que los programadores y el departamento de TI piensan demasiado bien de sí mismos. Un desarrollador puede realizar ingeniería inversa en un proceso como este en una semana. Asumiendo que le costaría a un competidor $ 2000 contratar a un desarrollador para realizar una ingeniería inversa de esto por una semana, ahora piense en los costos del servidor necesarios para soportar los 10 millones de clientes por año que tiene esta compañía. ¿Realmente vale la pena?

Ahora considere que usar un CDN para JavaScript podría disminuir los costos de alojamiento y mejorar el rendimiento al almacenar en caché más cerca de cada cliente. La falta de viajes de ida y vuelta al servidor en cada cambio de página haría que el proceso fuera más fluido, sin necesidad de administrar sesiones del lado del servidor. Solo una POST a una API RESTful al final del proceso para obtener una cotización.

Depende mucho de lo que estés desarrollando. Una aplicación financiera nunca debe tener la lógica comercial del lado del cliente. No querría que nadie tuviera acceso a su lógica comercial ¿Lo haría?

Por el contrario, un juego como MafiaWars debería tener la lógica comercial del lado del cliente, evita múltiples solicitudes al servidor para cada validación comercial, reduciendo así la latencia de la aplicación.

Del lado del servidor para proteger mejor sus activos (tecnología) de la competencia.