lunes, 28 de mayo de 2018

Para que sirve WHERE 1=1


Si eres programador, lo más probable que al final hallas tenido que lidiar con SQL. En el mundo actual es prácticamente el estándar de lenguaje para guardar información.
No importa si has programado en PHP, Java, .NET o algún otro lenguaje, al final vas a terminar usando código SQL para ejecutar querys a la Base de Datos. 
La ventaja del SQL, es que no importa si usas Oracle, SQL-SERVER, mySQL o algún otro motor de base de datos, conociendo SQL sabes como utilizar la Base de Datos.
Y la ventaja de las bases de datos, es que a la misma base de datos pueden conectarse aplicaciones hechas en Java, en PHP, .NET o en otro lenguaje, al final no importa, mutiples aplicaciones pueden acceder  a la Base de Datos escritas en diferentes lenguajes.
Así que como programadores al menos podemos agradecer eso de las bases de Datos.
Sin duda como programador te has topado mucho con este código SQL: WHERE 1=1
¿Que significa esta instrucción?
Bueno en realidad es un truco de programación. Prueba a poner en un lenguaje de programación IF 1=1
¿Que resultado da? Bueno es una forma de decirle al programa que la condición siempre se cumple. En la mayoría de los programas, ese código es completamente inútil. No tiene sentido poner una condición que siempre se cumpla.
Pero  SQL es uno de los lenguajes que se puede decir que son construidos por otros lenguajes. Es decir, prácticamente nunca ejecutas sentencias SQL directamente con un cliente SQL sobre la base de Datos. En la mayoría de los casos alguna aplicación escribe código SQL que posteriormente ejecuta en una Base de Datos.
Esto tiene muchísimas ventajas. Digamos que estas llenando datos de un formulario, que utilizas para posteriormente hacer una consulta a una base de datos. De esta manera en tiempo de ejecución el usuario puede hacer consultas dinámicas con tu aplicación. Así que el código SQL es construido sobre la marcha, incluyendo los valores de diversas variables para crear las sentencias.
Pero al situarnos en este ejemplo, digamos que tienes una tabla de alumnos. Quieres que un Data Grid muestre los valores de esa tabla, filtrando por semestre, por materia,por rango de calificaciones, etc. Obtienes los valores de TextBox, y deseas luego usarlos para construir una sentencia de consulta SQL. Hasta aquí todo bien. Pero ¿como comienzas el WHERE (que es la parte importante) de tu consulta?
Dependiendo de que valores ingrese el usuario, ya que todos son opcionales, se construirá el WHERE de tu consulta. Pero no sabes realmente que valor irá primero, pues el usuario puede elegir cualquiera o de hecho puede que no elija ninguno. ¿como podrías manejar esto a escribir la sentencia por código?
Bueno podrías hacer un CASE y una lógica complicada en caso de que elija la materia, o elija el semestre, o ambas, o ninguna , o elija un rango de promedios. Las combinaciones son bastantes. Todo por que no sabemos como empezar el WHERE, ya que las sucesivas condiciones pueden simplemente concatenarse con un AND.
Ante este problema surge una idea muy simple: poner una condición que siempre se cumpla,un valor dummy por así decirlo, a la que podamos concatenar las condiciones que queramos usando un AND.
Y así nació WHERE 1=1. Si tu usuario no elije ninguna condición, esta condición trae la tabla completa. Si elije alguna o varias, simplemente se van concatenando. Y listo, programar es más fácil

viernes, 16 de febrero de 2018

¿Que es Front End y Back End?

¿Que es Front End y Back End?

Front End y Back End son dos conceptos muy usados en desarrollo web. Pero exceden este ámbito. Podría decirse que en programación es la separación que existe entre dos capas: la capa de presentación o visualización , que es con la que interactua el usuario, y la capa de acceso a datos.
En un sistema de escritorio desarrollado en un lenguaje visual podríamos decir que Front End es el conjunto de pantallas y programación que responde a las acciones del usuario (eventos como hacer click en un botón) El Front End nos sirve para interactuar con el usuario y recopilar datos. El Back End viene siendo la lógica de negocio que nos permite procesar esos datos, suele estar relacionada con el almacenamiento de los mismos. Por ejemplo, independientemente del lenguaje que usemos, siempre terminaremos usando una Base de Datos que manejamos con lenguaje SQL. El proceso de los datos, su inserción, recopilación y mantenimiento se relaciona con el Back End.

Pero en programación Web la división es mucho mas obvia:

Front End

Es el conjunto de tecnologías que presentan la información y operan con el usuario del lado del cliente en su navegador web. Suele incluir el clásico HTML y CSS para la presentación, y JavaScript para la programación interactiva. Se preocupa sobre todo de la presentación de la información y de que se pueda interactuar correctamente con el usuarios. En el desarrollo Web, la manera de comunicarse con el Back End puede ser mediante peticiones REST (POST y GET) o mejor aun de forma interactiva usando AJAX, enviando mensajes en XML y JSON.



Back End

Es el conjunto de tecnologías que funcionan en el servidor. Una de las más usadas suele ser PHP que se integra de forma natural con el servidor Apache, pero también se puede usar JAVA, APEX Node.JS o incluso .NET. Estos programas se encargan de mantener la base de datos, guardando la información y enviándola al cliente 
Generalmente la Base de Datos es mySQL pero de igual manera puede ser Oracle o en mucho menor medida SQL-SERVER.
Digamos que el Back End es el CORE de la información y donde se realizan todas las operaciones, y finalmente si es necesario se entrega una respuesta al Front End.
No importa que información obtenga debe presentarla en un formato legible para el navegador, generalmente HTMl y JavaScript. Es por eso que los lenguajes de Back End suelen usarse como constructores de código, por ejemplo PHP.

Con estos dos conceptos básicos, ya te puedes dar una idea de como se presentara tu información web



martes, 6 de febrero de 2018

¿Que es HTTP Request y Response?

HTTP REQUEST y RESPONSE son dos conceptos básicos en el desarrollo web, pero no siempre le quedan claros a los programadores. Hoy quiero definirlos, para que veamos que es mucho más sencillo de lo que pensamos:

HTTP singifica  HyperText Transfer Protocol. Esta es la forma de comunicación de datos básica en Internet. La comunicación de datos empieza con un request enviado del cliente, y termina con la respuesta del servidor web.
Por ejemplo, si fuera un ejemplo clásico con un ser humano visitando una página Web:

·         Un sitio web que empieza con la URL http:// es entrado en un navegador web de la computadora del cliente. El navegador puede ser Chrome, Firefox, o Internet explorer, no importa.

·        El navegador envía un request al servidor web que esta hospedado en el website.

·         El servidor web regresa una respuesta como un página de HTML, o algún otro formato de documento al navegador (puede ser un mp4, mp3, pdf, doc, entre otros soportados por el navegador)


·         El navegador despliega el response del servidor al usuario. Por supuesto esto dependerá de los formatos que soporte el navegador.

Por supuesto lo bello de esto, es que no es siempre este mismo proceso tradicional el que se ejecuta. Mucha de la comunicación vía web, ya no se hace directamente entre humano-maquina, cada vez más son aplicaciones automatizadas de ambos lados, las que se envían datos. Es decir por ejemplo yo tengo un programa en PHP, APEX, o algún otro lenguaje que utilizo para enviar request y recibir respond, de manera que la comunicación es de máquina a máquina

Ahora bien, ¿Qué contienen el request y el response?

HTTP Request Structure from Client
Un simple mensaje de request de un cliente tiene los siguientes componentes:
  • Una línea de request para obtener el recurso, por ejemplo un request con el método GET /content/page1.html está requiriendo el recurso llamado /content/page1.html del servidor
  • Encabezados. Indican cosas como el lenguaje, codificación, tipo de datos (XML,JSON, etc). (Por ejemplo– Accept-Language: EN).
  • Una línea vacía.
  • Un cuerpo del mensaje que es opcional. Entre aplicaciones esta es la parte mas importante. Por ejemplo, yo puedo enviar un XML o un JSON  a otra máquina, y el servidor web interpretara la información que yo le mando.
Todas las líneas terminan con un retorno de carro y nueva línea. La línea vacía solo contiene el retorno de carro y la nueva línea sin espacios.
HTTP Response Structure from Web Server
Un simple response del servidor web contiene lo siguiente:
  • HTTP Status Code (Por ejemplo HTTP/1.1 301 Movido Permanentemente, significa que el recurso requerido fue movido permanentemente y redirigido a otro recurso).
  • Encabezados. Igual que en el request, describen el contenido del response (Example – Content-Type: html)
  • Una línea vacía.
  • Un cuerpo de mensaje, que es opcional. Cuando trabajamos con aplicaciones, aquí puede venir la respuesta en XML u otro formato. Cuando es una página del navegador, contiene el código HTML que forma nuestra página.
Todas las líneas terminan con un retorno de carro y nueva línea. La línea vacía solo contiene el retorno de carro y la nueva línea sin espacios.
No hay mayor ciencia en la comunicación bajo el protocolo HTTP. Pero es poderoso y flexible por que permite desde visualizar páginas web , hasta intercambiar datos entre aplicaciones.