Qué Es Un Framework
Qué Es Un Framework
Qué Es Un Framework
FRAMEWORKS
¿Qué es un framework?
Es un conjunto de herramientas, librerías y buenas prácticas para resolver una serie de
problemas. En Desarrollo Backend, todos los frameworks tienen la principal tarea de crear
un servidor web.
Python
Es un lenguaje de programación de alto nivel creado por Guido van Rossum en 1991. Entre
sus caracteristicas está lo fácil de usar y leer bajo su filosofia de DRY (Don’t Repeat
Yourself). Usado comunmente para análisis de datos y machine learning.
console.log('Hola Mundo!')
PHP
Del acrónimo Personal Hypertext Processor. Es un lenguaje originalmente diseñado para el
desarrollo web con contenido dinámico. Fue uno de los primeros lenguajes de
programación del lado del servidor en incluir su código en documentos HTML. El código
es interpretado por un servidor que genera el HTML de la página.
<?php
echo "Hola Mundo!";
?>
Java
Es un lenguaje de programación orientado a objetos. Su principal intención es poder
escribir aplicaciones que se ejecuten en cualquier dispositivo (WORA, Write Once, Run
Anywhere). A partir del 2012 es uno de los lenguajes de programación más populares para
desarrollo de aplicaciones web con aproximadamente 10 millones de usuarios.
Ruby
Ruby, creado por Yukihiro Matsumoto en 1995, combina una sintaxis inspirada en Python
y Perl. Al igual que Python, es un lenguaje de alto nivel, lo que lo hace más fácil y rápido
de aprender.
Ruby fue originalmente creado para hacer de la programación algo divertido, y en un inicio
era un lenguaje usado para crear videojuegos. Se popularizó en el mundo del desarrollo
web gracias a Ruby On Rails.
GoLang
Es un lenguaje de programación diseñado por Google. Creado en 2009, es un lenguaje
compilado, tipado y muy similar a C. Entre sus características está la concurrencia y la
tipificación dinámica presente en lenguajes como Javascript, Python y Ruby.
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
El artículo anterior te mostró que pinta tiene la comunicación entre los clientes web y los
servidores, la naturaleza de las peticiones y respuestas HTTP, y lo que necesita hacer una
aplicación web de lado servidor para responder a las peticiones de un explorador web. Con
este conocimiento en nuestra mochila, es hora de explorar cómo los frameworks web
pueden simplificar estas tareas, y darte una idea de cómo escogerías un framework para tu
primera aplicación web de lado servidor.
Las siguientes secciones ilustran algunos puntos usando fragmentos de código tomados de
frameworks web reales. No te preocupes si no todo tiene sentido ahora; te pondremos a
trabajar sobre el código en nuestros módulos de framework específicos.
Visión general
Los frameworks de lado servidor (es decir, "los frameworks de aplicaciones web") son
frameworks software que hacen más fácil escribir, mantener y escalar aplicaciones
web. Proporcionan herramientas y bibliotecas que simplifican tareas comunes de desarrollo
web, incluyendo enrutado de URLs a los manejadores apropiados, interactuación con bases
de datos, soporte de sesiones y autorizaciones de usuario, formateado de la salida (ej,
HTML, JSON, XML), y mejora de la seguridad contra los ataques web.
La sección siguiente proporciona un poco más detalle sobre cómo los frameworks web
pueden facilitar el desarrollo de aplicaciones web. Explicaremos a continuación algunos de
los criterios que puedes usar para elegir un framework web, y luego hacer una lista
de algunas de tus opciones.
Esta sección debate algo de la funcionalidad que proporcionan con frecuencia los
frameworks web (!no todo framework proporcionará necesariamente todas estas
caracteríticas!)
Como vimos en el último artículo, los servidores web y los exploradores se comunican vía
el protocolo HTTP — los servidores esperan las peticiones HTTP del explorador y
devuelven información en respuestas HTTP. Los frameworks web te permiten escribir
sintaxis simplificada que generará el código de lado servidor para trabajar con estas
peticiones y respuestas. Esto significa que tendrás un trabajo más fácil, interacción más
fácil, código de más alto nivel en vez de primitivas de red de bajo nivel.
El ejemplo de más abajo muestra cómo funciona ésto en el framework web Django
(Python). Cada función de visualización "view" (un manejador de peticiones) recibe un
objeto HttpRequest que contiene información de petición, y se le pide devolver un objeto
HttpResponse con la salida formateada (en este caso una cadena de texto).
def index(request):
# Get an HttpRequest (request)
# perform operations using information from the request.
# Return HttpResponse
return HttpResponse('Output string to return')
Enrutado de peticiones al manejador adecuado
@app.route("/")
def hello():
return "Hello World!"
Por el contrario Django espera que los desarrolladores definan una lista de mapeos URL
entre un patrón URL y una función de visualización.
urlpatterns = [
url(r'^$', views.index),
# example: /best/myteamname/5/
url(r'^(?P<team_name>\w.+?)/(?P<team_number>[0-9]+)/$', views.best),
]
Fácil acceso a los datos en la petición
Los datos pueden codificarse en una petición HTTP de muchas maneras. Una
petición GET para recuperar ficheros o datos de un servidor puede codificar los datos que se
necesitan en parámetros URL o dentro de una estructura URL. Una petición POST para
actualizar un recurso en el servidor puede en cambio incluir la información de actualización
como "datos POST" dentro del cuerpo de la petición. La petición HTTP puede también
incluir información sobre la sesión o usuario actual en un cookie de lado cliente.
Los sitios web utilizan bases de datos para almacenar información tanto para ser
compartida con los usuarios como sobre los propios usuarios. Los frameworks web
proporcionan frecuentemente una capa de base de datos que abstrae las operaciones de
lectura, escritura, consulta y borrado de la base. Nos referimos a esta capa de abstracción
como Mapeador de Objetos Relacionados (Object-Relational Mapper, ORM).
Puedes reemplazar la base de datos subyacente sin tener necesariamente que cambiar el
código que la usa: Esto permite a los desarrolladores optimizar las características de las
diferentes bases de datos en función de su uso.
la validación básica de datos puede implementarse dentro del framework. Esto hace más
fácil y seguro comprobar que los datos se almacenan en el campo correcto de la base, que
tienen el formato adecuado (ej. una dirección de correo electrónico), y que no son
maliciosos de ninguna manera (los craqueadores utilizan ciertos patrones de código para
hacer cosas malas como borrar registros de las bases de datos).
Por ejemplo, el framework web de Django proporciona un ORM, y utiliza la referencia del
objeto usado para definir la estructura de un registro similar al modelo. El modelo
especifica los tipos de campos que se almacenarán, lo que puede proporcionar una
validación a nivel de campo sobre qué información se puede guardar (ej. un campo de
email sólo permitiría direcciones válidas de correo electrónico). Las definiciones de campos
pueden también especificar su tamaño máximo, etiquetas de texto para los formularios, etc.
El modelo no establece ninguna información sobre la base de datos subyacente ya que
ese es un ajuste de configuración que se puede cambiar de forma separada de nuestro
código.
El primer fragmento de código más abajo muestra un modelo de Django muy simple para
un objeto Team. Éste almacena el nombre y nivel del equipo como campos de caracteres y
especifica el número máximo de éstos que pueden almacenarse en cada registro.
El team_level es un campo de selección, de manera que proporcionamos un mapeo entre
las opciones a mostrar en pantalla y los datos a almacenar, junto con un valor por defecto.
#best/models.py
class Team(models.Model):
team_name = models.CharField(max_length=40)
TEAM_LEVELS = (
('U09', 'Under 09s'),
('U10', 'Under 10s'),
('U11, 'Under 11s'),
... #list our other teams
)
team_level =
models.CharField(max_length=3,choices=TEAM_LEVELS,default='U11')
El modelo de Django proporciona una API de consulta simple para buscar en la base de
datos. Ésta puede comprobar coincidencias contra un gran número de campos al mismo
tiempo usando diferentes criterios (ej. exacto, insensible a las mayúsculas, mayor que, etc.),
y puede soportar sentencias complejas (por ejemplo, puedes especificar una búsqueda de
equipos U11 que tengan un nombre de equipo que empiece por "Fr" or finalice con "al").
#best/views.py
def youngest(request):
list_teams = Team.objects.filter(team_level__exact="U09")
context = {'youngest_teams': list_teams}
return render(request, 'best/index.html', context)
Renderización de datos
Los frameworks web proporcionan con frecuencia sistemas de plantillas. Éstas te permiten
especificar la estructura de un documento de salida, usando marcadores de posición para los
datos que serán añadidos cuando se genere la página. Las plantillas se usan con frecuencia
para crear HTML, pero también pueden crear otros tipos de documentos.
Por ejemplo, el sistema de plantillas de Django te permite especificar variables usando una
sintaxis de "llaves dobles" (ej. {{ variable_name }}), que serán reemplazadas por valores
pasados desde la función de visualización cuando la página sea renderizada. El sistema de
plantillas también proporciona soporte para expresiones (con la sintaxis: {% expression
%}), que permite a las plantillas realizar operaciones simples como iterar sobre la lista de
valores pasados a la misma.
Nota: Muchos otros sistemas de plantillas usan una sintaxis similar, ej.: Jinja2 (Python),
Handlebars (JavaScript), Moustache (JavaScript), etc.
El fragmento de código de abajo muestra como hacer este trabajo. Continuando el ejemplo
del "equipo más joven" de la sección anterior, la "view" pasa a la plantilla HTML una
variable tipo lista llamada youngest_teams. Dentro del esqueleto HTML tenemos una
expresión que primero comprueba que la variable youngest_teams existe, y luego itera
sobre ella en un bucle for. En cada iteración la plantilla presenta en pantalla el valor
del team_name del equipo de uno de los elementos de la lista.
#best/templates/best/index.html
<!DOCTYPE html>
<html lang="en">
<body>
{% if youngest_teams %}
<ul>
{% for team in youngest_teams %}
<li>{{ team.team_name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No teams are available.</p>
{% endif %}
</body>
</html>
Hay muchos otros posibles factores, incluyendo licenciamiento, si el framework está bajo
desarrollo activo o no, etc.
Los frameworks de lado servidor de más abajo representan unos pocos de los más
populares disponibles en el momento de escribir este artículo. Todos ellos tienen todo lo
que necesitas para ser productivo — son de código abierto, están bajo desarrollo activo,
tienen comunidades entusiastas creando documentación y ayudando a los usuarios en
paneles de debate, y se usan en un gran número de sitios web de perfil alto. Hay muchos
otros frameworks de lado servidor fantásticos que puedes descubrir usando una búsqueda
básica en internet.
Nota: ¡Las descripciones vienen (parcialmente) de los sitios web de los frameworks!
Django (Python)
Django es un Framework Web Python de alto nivel que promueve el desarrollo rápido y
limpio y el diseño pragmático. Construido por desarrolladores experimentados, tiene en
cuenta muchos de los problemas del desarrollo web, de manera que puedes focalizarte en
escribir el código de tu app sin necesidad de reinventar la rueda. Es gratis y de código
abierto.
Django sigue la filosofía de "Baterias incluidas" y proporciona casi todo lo que la mayoría
de desarrolladores querría hacer "de fábrica". Como todo está incluido, todo funciona en
conjunto, sigue principios de diseño consistentes y tiene una extensa documentación
actualizada. Es también veloz, seguro y muy escalable. Al estar basado en Python, el
código de Django es fácil de leer y de mantener.
Entre los sitios populares que usan Django (según su página web) se incluyen: Disqus,
Instagram, Knight Foundation, MacArthur Foundation, Mozilla, National
Geographic, Open Knowledge Foundation, Pinterest, Open Stack.
Flask (Python)
A pesar de ser minimalista, Flask puede crear sitios web "de fábrica". Contiene un servidor
de desarrollo y depurador, e incluye soporte para plantillas Jinja2, cookies seguros, prueba
de unidades, y distribución de peticiones RESTful. Tiene buena documentación y una
comunidad activa.
Flask se ha vuelto extremadamente popular, particularmente entre desarrolladores que
necesitan proporcionar servicios web en sistemas pequeños, y con recursos escasos (ej.
ejecutar un servidor web en una Raspberry Pi, Controladores de Drones, etc.)
Express (Node.js/JavaScript)
Un montón de compañías de perfil alto usan Express, como: Uber, Accenture, IBM, etc.
(aquí tienes una lista).
Rails (normalmente referenciado como "Ruby on Rails") es un framework web escrito para
el lenguaje de programación Ruby.
Rails sigue una filosofía de diseño muy similar a Django. Como Django proporciona
mecanismos estándard para el enrutado de URLs, acceso a datos de bases, generación de
plantillas y formateo de datos como JSON o XML. Promueve de forma similar el uso de
patrones de diseño como DRY ("dont repeat yourself", no te repitas — escribir el código
una única vez si es posible), MVC (model-view-controller) y numerosos otros.
ASP.NET
Uno de los diferenciadores de ASP.NET es que está construido sobre el Common Language
Runtime (CLR), permitiendo a los programadores escribir código ASP.NET usando
cualquier lenguaje .NET soportado (C#, Visual Basic, etc.). Como muchos productos
Microsoft se beneficia de herramientas excelentes (frecuentemente gratuitas), y una
comunidad de desarrolladores activa, y documentación bien escrita.
Mojolicious (Perl)
Hace tiempo en los primeros días de la Web, mucha gente aprendió Perl gracias a una
magnífica biblioteca llamada CGI. Era lo suficientemente simple para empezar sin saber
mucho sobre el lenguaje y lo suficientemente potente para mantenerte en marcha.
Mojolicious implementa esta idea usando el último grito de las tecnologías.
Sumario
Este artículo ha mostrado que los frameworks web pueden hacer fácil el desarrollo y
mantenimiento del código de lado servidor. También ha proporcionado una visión general
de alto nivel de unos pocos frameworks más populares y debatido los criterios para elegir el
framework para una aplicación web. Deberías tener en este momento una idea de cómo
elegir un framework web para tu propio desarrollo de lado servidor. Si no, no te preocupes
— más tarde a lo largo del curso te daremos tutoriales detallados de Django y Express para
darte algo de experiencia de funcionamiento real con un framework web.