Mostrando entradas con la etiqueta web. Mostrar todas las entradas
Mostrando entradas con la etiqueta web. Mostrar todas las entradas

domingo, 23 de noviembre de 2025

Programando en C# no. 12 (ASP .NET Core)

En está ocasión crearemos un proyecto webapi con ASP .NET Core mediante la herramienta ``dotnet``. Si no la tienes instalada puedes ir a este sitio:

https://dotnet.microsoft.com/es-es/download

¿Qué haremos? Un servicio API para obtener el nuevo sueldo de un empleado de acuerdo a estos datos de entrada: id, nombre, sueldo base, edad, género y estado civil. Por el momento no usaremos alguna base de datos. Las condiciones a cumplir para el nuevo sueldo son las siguientes:

IF estado_civil == "casado" THEN
   bono25Porciento();
ELSE
   bono10Porciento();
END IF;

IF sueldo_base <= 20000 THEN
   aumentoSueldo25Porciento();
ELSE
   IF sueldo_base > 25000 THEN
      aumentoSueldo5Porciento();
   END IF;
END IF;

El servicio tomará los datos del usuario (id, nombre, sueldo base, edad y género) y con base a las condiciones dará un aumento. Como se puede ver no tiene mucha ciencia entender lo que queremos realizar.

Abrimos una terminal y creamos el proyecto:

$ dotnet new web -o SueldoNuevo
$ cd SueldoNuevo
$ code -r ../SueldoNuevo

Esto nos creará el proyecto, nos ubicará en el directorio y abrirá Visual Studio Code. Abrimos el programa principal y lo editamos:

Program.cs

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Sueldo nuevo en C#");

app.Run();

Ejecutamos con este comando:

$ dotnet run

Abrimos el navegador en la ruta: http://localhost:5048

Salida:

Sueldo nuevo en C#

Como queremos hacer una aplicación modular, crearemos una carpeta Model y ahí tendremos una clase llamada Empleado.cs.

using System;

namespace Model
{
    public class Empleado
    {
        public int Id
        {
            get;set;
        }

        public string Nombre
        {
            get; set;
        }

        public int Edad
        {
            get; set;
        } 

        public double SueldoBase
        {
            get; set;
        }

        public bool isCasado
        {
            get;set;
        }

        public string Genero
        {
            get; set;
        }

        public Empleado()
        {
            Id = 0;
            Nombre = string.Empty;
            SueldoBase = 0.0;
            Edad = 0;
            isCasado = false;
            Genero = string.Empty;
        }
    }
}

Ahora creamos un directorio denominado como Services. Dentro crearemos una interface llamada IEmpleadoService.cs y una clase que la implementa llmada EmpleadoService.cs.

IEmpleadoService.cs

using System;
using Model;

namespace Services
{
    public interface IEmpleadoService
    {
        double GetNuevoSueldo(Empleado empleado);
    }
}

EmpleadoService.cs

using System;
using Model;

namespace Services
{
    public class EmpleadoService: IEmpleadoService
    {
        public double GetNuevoSueldo(Empleado empleado)
        {
            var sueldoFinal = empleado.SueldoBase;
            if (empleado.isCasado)
            {
                sueldoFinal += empleado.SueldoBase + 0.25;
            }else
            {
                sueldoFinal += empleado.SueldoBase + 0.10;
            }

            if (empleado.SueldoBase <= 20000)
            {
                sueldoFinal += empleado.SueldoBase + 0.25;
            }else if (empleado.SueldoBase > 25000)
            {
                sueldoFinal += empleado.SueldoBase + 0.05;
            }else
            {
                sueldoFinal += empleado.SueldoBase + 0.01;
            }
            
            return sueldoFinal;
        }
    }
}

Ahora implementaremos la lógica descrita en el pseudo código de arriba. Modificamos el programa principal:

Program.cs

using Model;
using Services;

var builder = WebApplication.CreateBuilder(args);

// Registro del servicio en el contenedor de DI
builder.Services.AddScoped<IEmpleadoService, EmpleadoService>();

var app = builder.Build();

app.MapGet("/", () => "Sueldo nuevo en C#");

// Endpoint que usa el servicio inyectado
app.MapPost("/calcular", (Empleado empleado, IEmpleadoService empleadoService) =>
{
    double nuevoSueldo = empleadoService.GetNuevoSueldo(empleado);
    return new
    {
        empleado.Nombre,
        SueldoBase = empleado.SueldoBase,
        SueldoFinal = nuevoSueldo
    };
});

app.Run();

¿Qué podemos notar en este programa?

  • Hemos inyectado la clase servicio (EmpleadoService) de manera similar a lo que se hace con @Autowired de Spring Boot. 
  • Hemos creado un endpoint con la lógica del servicio inyectado.

Para hacer una petición al servicio crearemos un script con Powershell:

nuevosueldo.ps1

$body = @{
    Id = 1
    Nombre = "Pedro Ramírez"
    Edad = 35
    SueldoBase = 18000
    isCasado = $true
    Genero = "M"
} | ConvertTo-Json

Invoke-RestMethod -Uri "http://localhost:5048/calcular" `
    -Method Post `
    -ContentType "application/json" `
    -Body $body

Si tenemos curl, podemos hacerlo de esta forma:

curl -X POST http://localhost:5048/calcular \
  -H "Content-Type: application/json" \
  -d '{
    "Id": 1,
    "Nombre": "Pedro Ramírez",
    "Edad": 35,
    "SueldoBase": 18000,
    "isCasado": true,
    "Genero": "M"
  }'

Ejecutamos con este comando:

$ dotnet run

Ejecutamos el script:

$ .\nuevosueldo.ps1 

Si todo va bien, la salida será la siguiente:

nombre        sueldoBase sueldoFinal
------        ---------- -----------
Pedro Ramírez      18000     54000.5

UPDATE: También podemos hacer peticiones con una archivo *.http. Crearemos uno en el directorio principal y lo nombraremos MyRequests.http. Tendrá el siguiente contenido:

POST http://localhost:5048/calcular
Content-Type: application/json

{
  "Id": 1,
  "Nombre": "Pedro Ramírez",
  "Edad": 35,
  "SueldoBase": 18000,
  "isCasado": true,
  "Genero": "M"
}


GET http://localhost:5048/

Si todo va bien, veremos este resultado:

¡Hemos creado un sencillo servicio api con C#!

Conclusión:

Creamos una aplicación webapi con C# desde la herramienta dotnet.

Aprendimos como se puede dividir la aplicación modularmente (directorios Model y Services).

Como implementar métodos de una interface C# (IEmpleadoService.cs y EmpleadoService.cs)

Como usar inyección de dependencia similar a lo que se hace con Spring Boot.

Como hacer una petición al servicio usando un script de Powershell y/o curl. Además del archivo *.http

Lo que sigue es usar una Base de datos (MS SQL Server, Maria DB, PostrgeSQL, etc.) y tablas para replicar esa funcionalidad, pero lo haremos en otra ocasión.

Enlaces:

https://learn.microsoft.com/es-es/aspnet/core/tutorials/min-web-api?view=aspnetcore-10.0&tabs=visual-studio-code

https://dotnet.microsoft.com/es-es/apps/aspnet/apis

viernes, 7 de noviembre de 2025

ASP .NET Core vs Spring Boot: ¿Cuál elegir?

En este post hablaremos de dos de las herramientas más populares y utilizadas para el desarrollo web. Por un lado, ASP (Active Server Pages) .Net Core y por el otro, Spring Boot. Ambas con sus seguidores, ambas con sus detractores. Ambas con sus pros y contras.

Empecemos con ASP .Net Core. Un framework desarrollado por la malévola empresa Microsoft (¿broma?) enfocada en la construcción de aplicaciones web. Unifica a ASP.NET MVC y ASP.NET Web API. Además de ser Open Source y multiplataforma. Además incluye Blazor, útil para desarrolladores que no quieren aprender Javascript (broma).

La documentación oficial nos dice:

".NET es una plataforma para desarrolladores formada por herramientas, lenguajes de programación y bibliotecas para crear una gran variedad de aplicaciones. ASP.NET Core amplía la plataforma para desarrolladores de .NET con herramientas y bibliotecas específicas para compilar aplicaciones web".

Si quieres instalar paquetes adicionales es necesario usar Nuget.

Actualmente existe infinidad de documentación oficial y no oficial, vídeos en Youtube, TikTok, etc. sobre esta herramienta. Además de no olvidar de libros, blogs y tutoriales en la red de redes.

Continuando con Spring Boot (no confundir con Spring Framework), la cual es una herramienta que ha facilitado el desarrollo web para los programadores Java (sic). Nos permite crear microservicios y aplicaciones web de una manera más sencilla a como se hacía antes con miles de configuraciones XML que ahogaban al pobre programador.

Spring Boot es una extensión de la plataforma Spring Framework que prioriza la configuración sobre la convención, con el objetivo de minimizar las preocupaciones de configuración al crear aplicaciones basadas en Spring. Dejando al programador ocupado con cosas más importantes (y menos tediosas).

Es importante notar que Spring Boot es un módulo basado en Spring Framework.


Principales características

ASP .Net Core:

  • Experiencia de desarrollo sin compilación (es decir, la compilación es continua, de modo que el desarrollador no tiene que invocar el comando de compilación). 
  • Framework modular distribuido como paquetes NuGet Entorno de ejecución optimizado para la nube (optimizado para Internet).
  • Compatibilidad con diversos sistemas operativos mediante la interfaz web abierta para .NET (OWIN). 
  • Un sistema de configuración basado en entornos y preparado para la nube.
  • Una canalización de solicitudes HTTP ligera y modular.
  • Crea y ejecuta aplicaciones ASP .Net Core multiplataforma en Windows, Mac y Linux. De código abierto y centrado en la comunidad. 
  • Control de versiones de aplicaciones en paralelo al usar .NET como destino. 
  • Soporte integrado para inyección de dependencias. 
  • Seguridad mejorada en comparación con Asp.Net.

Spring Boot

  • Desarrollo simplificado. 
  • Convención sobre configuración. 
  • Evitar escribir código reutilizable o configurar XML. 
  • Preparación para la producción. 
  • Arquitectura de microservicios. 
  • Flexibilidad. 
  • Programación reactiva. 

Pros y contras

ASP.NET Core

Pros:

  • Alto rendimiento gracias a Kestrel y compilación nativa. 
  •  Integración fluida con Azure y servicios Microsoft. Seguridad robusta con Identity y autenticación integrada. 
  •  Multiplataforma (Windows, Linux, macOS).

Contras:

  • Comunidad más pequeña fuera del ecosistema Microsoft. 
  • Curva de aprendizaje si vienes de otros stacks (como Java). 
  • Menos flexibilidad en comparación con Spring Boot en algunos patrones arquitectónicos.

Spring Boot

Pros:

  • Rápido desarrollo con configuración automática y amplia comunidad. 
  • Gran ecosistema: Spring Cloud, Spring Security, etc. 
  • Flexibilidad para arquitecturas complejas (microservicios, reactive, etc.). 
  • Amplio soporte en el mundo empresarial y open source.

Contras:

  • Puede volverse pesado si no se gestiona bien la configuración. 
  • Arranque más lento en comparación con ASP .Net Core
  • Requiere atención a versiones y dependencias para evitar conflictos.

¿Qué herramienta elegir?

Debes considerar que ASP .Net Core usa C#, ideal si vienes del ecosistema Microsoft o te interesa trabajar con Windows, Azure, o videojuegos (Unity).

Spring Boot usa Java como lenguaje base (aunque puedes optar por Kotlin o Groovy), excelente si te atrae el desarrollo empresarial, Android, o sistemas robustos multiplataforma.

Spring Boot tiene una comunidad más grande globalmente, con muchos tutoriales, cursos y proyectos open source.

ASP .Net Core tiene fuerte soporte en empresas que usan Microsoft stack, especialmente en América Latina y EE.UU.

Java/Spring Boot suele tener más demanda en bancos, aseguradoras y grandes corporativos.

ASP .Net Core es común en consultoras, software a medida, y empresas que usan Azure.

ASP .Net Core tiene una curva más suave si usas Visual Studio y te gusta trabajar con herramientas integradas.

HolaController.cs

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("[controller]")]
public class HolaController : ControllerBase
{
    [HttpGet]
    [Route("hola")]
    public string HolaMundo()
    {
        return "Hola, mundo";
    }
}

Spring Boot puede ser más complejo al principio, pero te da más control y flexibilidad a largo plazo.

HolaController.java

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HolaController {

    @GetMapping("/hola")
    public String holaMundo() {
        return "Hola, mundo";
    }
}

Veredicto final

.Net es una tecnología que cuenta con el respaldo de Microsoft y posee una compatibilidad con Azure de manera natural. Sin embargo, Java es el lenguaje más usado en entornos empresariales y eso otorga a Spring Boot cierta ventaja en el mercado laboral.

Si fueses un programador que necesita consolidarse y "agarrar un puesto" en el mundo de la tecnología web. Spring Boot sería el ideal.

Aunque ASP .Net Core ha ido robando terreno y le pisa los talones a otras herramientas como Spring Boot y podría dar la sorpresa de ganarle algunas áreas como el ámbito gubernamental. En el mundo del IT nada está escrito.

Enlaces:

https://dotnet.microsoft.com/es-es/apps/aspnet
https://www.arquitecturajava.com/spring-boot-que-es/
https://azure.microsoft.com/es-mx/resources/cloud-computing-dictionary/what-is-java-spring-boot
https://codemonkeyjunior.blogspot.com/2025/08/programando-en-c-no-9-usando-nuget.html
https://codemonkeyjunior.blogspot.com/2019/06/instalar-paquetes-nuget-con-dotnet.html
https://codemonkeyjunior.blogspot.com/2019/05/crear-una-aplicacion-web-con-asp-net.html






viernes, 17 de octubre de 2025

Creando una aplicación web sencilla con cpp-httplib

En esta ocasión veremos cómo crear una sencilla aplicación web con cpp-httplib.

cpp-httplib es una biblioteca de C++11 que simplifica la creación de servidores y clientes HTTP/HTTPS, caracterizada por ser de un solo archivo de encabezado para facilitar la configuración. Está diseñada para ser fácil de usar, pero también ofrece funcionalidades avanzadas como soporte SSL, compresión, cliente y registro.

Requisitos:

  • Tener git instalado. 
  • Tener el compilador g++ instalado. 
  • Tener msys64 instalado.

1. Descargar cpp-httplib desde Github:

$ git clone https://github.com/yhirose/cpp-httplib.git

Esto nos clonará el repo y generará un directorio llamado ``cpp-httplib``

2. Creamos un proyecto C++ llamado ``holamundo`` y nos ubicamos en el:

$ mkdir holamundo
$ cd holamundo

3. Copiamos el archivo ``httplib.h`` del directorio ``cpp-httplib`` al directorio ``holamundo``:

4. Creamos el programa ``main.cpp`` de tal manera que la estructura del proyecto sería la siguiente:

holamundo/
  httplib.h
  main.cpp

5. Editamos el programa ``main.cpp`` para que tenga el siguiente contenido:

#include "httplib.h"

int main() {
    httplib::Server svr;

    svr.Get("/hola", [](const httplib::Request&, httplib::Response& res) {
        res.set_content("¡Hola, mundo!", "text/plain");
    });

    svr.listen("localhost", 8082);
    return 0;
}

6. Compilamos y creamos el ejecutable:

$ C:\msys64\ucrt64\bin\g++.exe main.cpp -o hola_mundo.exe -I. -pthread -lws2_32 -static-libgcc -static-libstdc++

7. Lanzamos el ejecutable:

$ hola_mundo.exe 

Si todo va bien, abrimos el navegador en la siguiente URL: http://localhost:8082/hola

Mostrará el mensaje de "¡Hola, mundo!"

Conclusiones: El desarrollo web en C++ no es habitual a nivel laboral. Es más frecuente encontrar desarrollos hechos en C#, Java, Python o hasta Ruby. Sin embargo, el lenguaje C++ no es famoso por ser el ideal para ello.

Con respecto a Crow, cpp-httplib es mucho más fácil de usar (solo requiere un encabezado y no tener que instalar tantas dependencias). Si quieres desarrollar aplicaciones web con C++ es mejor opción.

Enlaces:

https://github.com/yhirose/cpp-httplib
https://codemonkeyjunior.blogspot.com/2025/10/crow-un-framework-para-c.html

lunes, 13 de octubre de 2025

Crow: un framework para C++

Crow es un microframework de C++ para crear servicios web HTTP o Websocket. Utiliza enrutamiento similar al de Flask de Python. Se considera sumamente rápido y eficiente.

Veamos un ejemplo

holamundo.cpp

#include "crow.h"

int main()
{
    crow::SimpleApp app;

    CROW_ROUTE(app, "/")([](){
        return "Hola, mundo";
    });

    app.port(18080).run();
}

Este código en C++ expone un sencillo servicio que imprime el famoso "Hola, mundo".

Requisitos para instalarlo:

  • Git.
  • Python (versión 3).
  • CMake.
  • VsCode con soporte a C++.
  • VCPKG.

Validamos si tenemos Git:

$ git --version

Validamos si tenemos Python:

$ python --version

Validamos si tenemos CMake:

$ cmake --version

Ahora instalaremos VCPKG. Abrimos una terminal y tecleamos este comando git para clonar el repo.

$ git clone https://github.com/microsoft/vcpkg.git

Nos ubicamos en la carpeta:

$ cd vcpkg

Ejecutamos estos archivos:

$ bootstrap-vcpkg.bat
$ vcpkg integrate install

Si todo va bien, clonaremos el repo de Crow (antes sal del directorio de vcpkg):

$ git clone https://github.com/CrowCpp/Crow.git

Nos ubicamos en el directorio de Crow:

$ cd Crow

Buscar el directorio de ``scripts``. Ejecuta estos comandos:

$ python merge_all.py ..\include crow_all.h

Si todo va bien, salimos del directorio de Crow y creamos un proyecto C++ vacío:

$ mkdir proyecto-crow
$ cd proyecto-crow

Copiamos los archivos ``crow_all.h``, ``example_with_all.cpp`` y ``vcpkg.json`` del directorio Crow al directorio del proyecto nuevo. Además agregamos ``crow_all.h`` como archivo de encabezado y ``example_with_all.cpp`` como archivo fuente.

El directorio quedará de este modo:

proyecto-crow/ 
   crow_all.h
   example_with_all.cpp
   vcpkg.json

Abrimos nuestro Visual Studio Code. Editamos el nombre del archivo C++ para denominarlo ``holamundo.cpp``. Sustituimos el contenido por este otro:

#include "crow.h"

int main()
{
    crow::SimpleApp app;

    CROW_ROUTE(app, "/")([](){
        return "Hola, mundo";
    });

    app.port(18080).run();
}

Debemos hacer una instalación más. Nos ubicamos en el directorio de vcpkg y ejecutamos este comando:

$ vcpkg install asio

Lanzamos otro comando:

$ vcpkg integrate install

Con esto nos permitira instalar la librería asio. Necesaria para nuestra aplciación. Regresamos al directorio del proyecto (proyecto-crow) y creamos el ejecutable:

$ g++ holamundo.cpp -o holamundo.exe

Si todo va bien, creará el ejecutable. Otra forma es con Visual Studio Code. 

Abrimos el navegador en la ruta: http://localhost:18080/

Con el mensaje de "Hola, mundo".

Conclusión: este es uno de los 101010100 frameworks web que prometen la panacea universal; resolver todos los problemas que los demás frameworks prometieron hace miles de años. Se ve interesante, pero en el mundo laboral difícilmente se optaría abandonar algún desarrollo en, digamos Spring Boot, por este. Además de ser para C++. Para ello se optarían otros lenguajes como Java, Python o C#.

Enlaces:

https://crowcpp.org


domingo, 28 de septiembre de 2025

Ktor: un framework para aplicaciones asincrónicas

Ktor es un framework para aplicaciones asincrónicas del lado del servidor y del lado del cliente. Su lenguaje de programación base es Kotlin.

Nos permite crear microservicios hasta todo tipo de aplicaciones cliente HTTP multiplataforma. Veamos un ejemplo de código en Ktor:

fun main() {
	embeddedServer(Netty, port = 8000) {
		routing {
			get ("/") {
				call.respondText("Hola, mundo!")
			}
		}
	}.start(wait = true)
}

¿Cómo comenzar? Simple, iremos al sitio: https://start.ktor.io/

En el Project Artifact colocaremos: com.inforhomex.ktor-helloword

El sitio te permite colocar plugins y ver un preview del proyecto a descargar:

Damos clic en el botón Download para descargar el proyecto. Lo descomprimimos y lo colocamos en algún directorio de nuestra máquina.

Es importante tener Gradle instalado. Pues con este construiremos el proyecto y echaremos a andar.

Abrimos la clase principal del proyecto creado

Application.kt

package com.inforhomex

import io.ktor.server.application.*

fun main(args: Array<String>) {
    io.ktor.server.netty.EngineMain.main(args)
}

fun Application.module() {
    configureRouting()
}

Editamos la clase ``Routing.kt``

package com.inforhomex

import io.ktor.server.application.*
import io.ktor.server.response.*
import io.ktor.server.routing.*

fun Application.configureRouting() {
    routing {
        get("/") {
            call.respondText("Hola, mundo!")
        }
    }
}

Podemos usar Visual Studio Code:

Compilando y ejecutando el proyecto.

Abrimos una terminal y nos ubicamos en el proyecto:

$ gradle build

Con esto construimos el proyecto y ahora lo ejecutamos:

$ gradle run

Si todo va bien, abrimos un navegador en la ruta: http://127.0.0.1:8080

Salida:

Hola, mundo!

¡Hemos creado nuestra primera aplicación sencilla con Ktor!

Continuaremos con este tema en próximas entregas.

Enlaces:

https://ktor.io/


sábado, 27 de septiembre de 2025

Conociendo Apache Tapestry

Según el sitio oficial, Tapestry es: un framework orientado a componentes para la creación de aplicaciones web altamente escalables en Java.

Como buen framework promete:

  • Ser altamente productivo. 
  • Implementar eficientemente el manejo de errores. 
  • Inyección de dependencia. 
  • Configuración vía anotaciones. 
  • Alta escalabilidad. 
  • Compatibilidad con Selenium. 
  • Con una arquitectura abierta y extensible. 
  • Java puro, sin reflexión. 
  • Puedes usar Java, Groovy o Scala como lenguaje de programación base.

Se puede descargar desde us sitio oficial: https://tapestry.apache.org/download.html

También se puede crear un proyecto usando Maven. La dependencia es la siguiente:

<dependency>
  <groupId>org.apache.tapestry</groupId>
  <artifactId>tapestry-core</artifactId>
  <version>5.8.7</version>
</dependency>

Creando un proyecto con Tapestry

Requisitos:

  1. Tener Maven instalado. 
  2. Tener Java 21 o más instalado.

Abrimos una terminal y tecleamos:

$ mvn archetype:generate -Dfilter=org.apache.tapestry:quickstart

Donde:

groupId= com.inforhomex
artifactId= tapestry-demo
version= 1.0-SNAPSHOT
package= com.inforhomex.demo
packageInPathFormat= com/inforhomex/demo
package= com.inforhomex.demo
groupId= com.inforhomex
artifactId= tapestry-demo
version= 1.0-SNAPSHOT

Nos ubicamos en el proyecto creado:

$ cd tapestry-demo

Ejecutamos la aplicación con Jetty:

$ mvn jetty:run

Abrimos el navegador en la ruta: http://localhost:8080/

Con esto hemos creado nuestra primera aplicación con Tapestry.

También podemos optar por clonar el proyecto base y probar las aplicaciones que vienen:

$ git clone https://github.com/apache/tapestry-5.git
$ cd tapestry-5

Nota: es necesario contar con Gradle instalado.

En conclusión: Tapestry es un framework Java para desarrollo web que se enfoca en componentes reutilizables y una arquitectura elegante. Sin embargo existen otros framework que a mi criterio llevan la delantera como Spring Framework con su Spring Boot, Quarkus, Micronaut y hasta Helidon.

Enlaces:

https://tapestry.apache.org/
https://github.com/apache/tapestry-5

sábado, 14 de junio de 2025

Un framework web ligero para PHP: CodeIgniter

Según el sitio oficial:

CodeIgniter es un potente framework PHP de tamaño muy reducido, creado para desarrolladores que necesitan un conjunto de herramientas simple y elegante para crear aplicaciones web con todas las funciones.

Características:

  • Ligero: footprint pequeño (~2MB). 
  • MVC: soporta el patrón Modelo-Vista-Controlador. 
  • Fácil configuración: mínima configuración inicial. 
  • Rendimiento: optimizado para alta velocidad. 
  • Seguridad: incluye herramientas para proteger contra CSRF, XSS, y validación de datos. 
  •  Documentación clara: guías detalladas y comunidad activa. 
  •  Flexibilidad: no impone estructuras rígidas, compatible con PHP 7.4+.

Como ya es habitual en este blog crearemos un sencillo ejemplo usando ahora este micro framework.

Usaremos Composer para crear el proyecto.

Creando un proyecto con CodeIgniter(y Composer)

Creamos el proyecto:

$ composer create-project codeigniter4/appstarter hola-mundo

Nos ubicamos en el directorio creado:

$ cd hola-mundo

Copiamos el archivo env a .env

$ cp env .env

Editamos el archivo .env y descomentamos y ajustamos la variable app.baseURL para que quede de la siguiente manera:

app.baseURL = 'http://localhost:8080'

Ejecutamos la aplicación:

$ php spark serve

Abrimos el navegador en la dirección:

http://localhost:8080

¡Hemos creado nuestra primera aplicación usando CodeIgniter y Compose!

En algunos casos deberás editar el archivo php.ini y descomentar extension=intl (quitando el ;) :

extension=intl

Ejecutar este comando e iniciar de nuevo el server:

$ compose install
$ php spark serve

Enlaces:

https://www.codeigniter.com/

viernes, 13 de junio de 2025

Conociendo Laravel: un framework para PHP

Laravel es un framework de PHP para desarrollar aplicaciones web, conocido por su sintaxis elegante, herramientas integradas y enfoque en la simplicidad y robustez. Facilita tareas como autenticación, enrutamiento, sesiones y más.

Si ya contamos con PHP y Composer instalados podemos crear un proyecto de la siguiente forma:

$ composer global require laravel/installer

Creamos un directorio y nos ubicamos en este:

$ mkdir proyecto
$ cd proyecto

Verificamos instalación:

$ laravel  --version

Creamos el proyecto:

$ laravel  new generador

Esto nos mostrará un prompt, elegiremos todo por default. Si todo va bien, se generará nuestro proyecto.

Nos ubicamos en el directorio creado (generador):

$ cd generador

Instalamos las dependencias y ejecutamos la aplicación:

$ npm install && npm run build
$ composer run dev

Si todo va bien, abriremos el navegador en la dirección:

http://localhost:5173/

¡Hemos creado nuestra primera aplicación con Laravel!

Enlaces:

https://laravel.com/

lunes, 2 de junio de 2025

Un vistazo a Apache Struts Framework

Apache Struts es un framework MVC gratuito y de código abierto para crear aplicaciones web Java elegantes y modernas.

Prioriza las convenciones sobre la configuración, es extensible mediante una arquitectura de plugins e incluye plugins compatibles con REST, AJAX y JSON.

Es utilizado para desarrollar aplicaciones web basadas en la arquitectura MVC (Modelo-Vista-Controlador).

Struts fue muy popular antes de la llegada de Spring Framework y sobre todo de Spring Boot. Sin embargo, debido a su gran rendimiento aún es usado en muchas empresas.

Requerimientos:

  • JDK 8 o superior. 
  • Apache Maven 3.8.6 o superior. 
  • Tener nociones de Java y JSP.
  • Se puede usar un IDE como Eclipse, Visual Studio Code o cualquier otro.
  • Sirve de mucho conocer algo de Spring Boot.

Nosotros usaremos la terminal para crear y ejecutar el proyecto.

Creando nuestra primera aplicación con Apache Struts2

Vamos a crear una sencilla aplicación de "Hola, mundo".

Creamos el proyecto Apache Struts2 con Maven y nos ubicamos en el directorio creado:

$ mvn archetype:generate -B 
  -DgroupId=org.cursomaven 
  -DartifactId=auditor -DarchetypeGroupId=org.apache.struts  
  -DarchetypeArtifactId=struts2-archetype-blank 
  -DinteractiveMode=false
$ cd auditor 

Abrimos el proyecto. Tendrá más o menos está estructura de carpetas:

auditor/ 
   pom.xml
   src/
     main/
       webapp/
          index.html
          WEB-INF/
           example/
           web.xml 
       resources/
          example.xml
          log4j2.xml
          struts.xml
       java/

Debemos eliminar los archivos innecesarios como: Login.java, HelloWorld.java, ExampleSupport.java. Esto para que solo quede una nueva clase llamada HolaMundo.java. Esto en la carpeta de java/org/cursomaven/example:

package org.cursomaven.example;


import com.opensymphony.xwork2.ActionSupport;


public class HolaMundo extends ActionSupport{

    public String execute() throws Exception {
        setMessage(getText(MESSAGE));
        return SUCCESS;
    }

    public static final String MESSAGE = "HolaMundo.message";
    
   
    private String message;

   
    public String getMessage() {
        return message;
    }

  
    public void setMessage(String message) {
        this.message = message;
    }
}

Tambien eliminaremos las páginas JSP del directorio webapp/WEB-INF/example. Esto para que solo quede una página JSP llamada HolaMundo.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title><s:text name="HolaMundo.message"/></title>
</head>

<body>
<h2><s:property value="message"/></h2>

</body>
</html>

Editamos los archivos: package.properties y example.xml. Los cuales se encuentran en los directorios src/main/resources y src/main/resources/org/cursomaven/example

package.properties

server.port= 8081
HolaMundo.message =Bienvenido a ApacheStruts2.

example.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<!-- 
  - This file is included by the struts.xml file as an example
  - of how to break up the configuration file into multiple files.
-->
<struts>
    <package name="example" namespace="/example" extends="struts-default">

        <default-action-ref name="HolaMundo" />

        <action name="HolaMundo" class="org.cursomaven.example.HolaMundo">
            <result>/WEB-INF/example/HolaMundo.jsp</result>
        </action>


        <!-- Add additional "example" package actions here. -->

    </package>
</struts>

Tambien editamos el archivo XML struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"/>
    <constant name="struts.devMode" value="true"/>

    <include file="example.xml"/>

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index"/>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HolaMundo</param>
                <param name="namespace">/example</param>
            </result>
        </action>

    </package>

    <!-- Add addition packages and configuration here. -->
</struts>

Construimos con Maven:

$ mvn clean install -X

Ejecutamos con el servidor emembido Jetty:

$ mvn jetty:run -Djetty.port=8081

Abrimos el navegador en la dirección:

http://localhost:8081/auditor/example/HolaMundo

¡Hemos creado nuestra primera aplicación con Apache Struts2!

Continuaremos con esta serie sobre Frameworks web en próximas entregas.

Enlaces:

https://struts.apache.org/index.html

Jai un lenguaje de programación inspirado en C++

Hoy hablaremos de un nuevo lenguaje de programación llamado Jai . Se trata de un lenguaje de programación que está desarrolland...

Etiquetas

Archivo del blog