|
|
Vamos a hacer una web API con Groovy, Spring boot y H2 (como dice el título)
Primero vamos a bajar nuestro proyecto de https://start.spring.io/ bien no sé como indicar lo que hay que seleccionar. Pero creo que es bastante fácil, groovy, h2, etc. Voy a utilizar maven y dejo el link al final del repositorio y pueden ver el pom.
Para comenzar vamos a hacer nuestras entidades :
@Entity
@Table(name = 'Demos')
class Demo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id
@Column
String unTexto
@Column
Boolean isUnCampoBool
@Column
LocalDate unaFecha
@OneToMany(cascade = CascadeType.ALL)
List<DemoItem> items = new ArrayList<>()
}
y
@Entity
@Table(name = 'DemoItems')
class DemoItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id
@Column
String unTexto
}
Luego el repositorio :
@Repository
interface DemoRepository extends JpaRepository<Demo, Integer> {}
Ahora el servicio con su implementación:
interface DemoService {
List<Demo> findAll()
Optional<Demo> findById(Integer todoId)
Demo insert(Demo demo)
Demo update(Demo demo)
Optional<Demo> delete(Integer id)
}
@Service
class DemoServiceImpl implements DemoService {
@Autowired
DemoRepository repository
@Override
List<Demo> findAll() {
return repository.findAll()
}
@Override
Optional<Demo> findById(Integer id) {
return repository.findById(id)
}
@Override
Demo insert(Demo demo) {
return repository.save(demo)
}
@Override
Demo update(Demo demo) {
return repository.save(demo)
}
@Override
Optional<Demo> delete(Integer id) {
Optional<Demo> demo = repository.findById(id)
if (demo.isPresent()) {
repository.delete(demo.get())
}
return demo
}
}
Y por ultimo el controller :
@RestController
@RequestMapping('demo')
class DemoController {
@Autowired
DemoService service
@GetMapping
List<Demo> findAll(){
service.findAll()
}
@PostMapping
Demo save(@RequestBody Demo demo){
service.insert(demo)
}
@PutMapping
Demo update(@RequestBody Demo demo){
service.update(demo)
}
@DeleteMapping('/{id}')
delete(@PathVariable Integer id){
Optional<Demo> demo = service.delete(id)
if (!demo.isPresent()) {
throw new NotFoundException<Demo>(id)
}
return demo.get()
}
@GetMapping('/{id}')
Demo getById(@PathVariable Integer id){
Optional<Demo> demo = service.findById(id)
if (!demo.isPresent()) {
throw new NotFoundException<Demo>(id)
}
return demo.get()
}
}
Y el controller lanza una excepción cuando no encuntra elementos que es esta :
@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "not found")
class NotFoundException<T> extends RuntimeException {
private Long id
NotFoundException() {}
NotFoundException(Long id) {
this.id = id
}
@Override
String getMessage() {
return T + " not found"
}
}
Y listo!!!
Dejo el repositorio Github : https://github.com/emanuelpeg/GroovyWebAPI
Download this free eMagazine from NGINX on effective planning, architecture, and deployment of APIs for reliable flexibility.
Si, se que quedo medio feita las letras, pero bueno...
Dejo link : https://www.nginx.com/resources/library/real-time-api-design-operation-observation/?utm_medium=paid-display&utm_source=infoq&utm_campaign=ww-nx_rtapi&utm_content=eb-sponsoredupdate#downloadPor el contrario, una cadena nula no se refiere a una instancia de un objeto System.String y cualquier intento de llamar a un método en una cadena nula provoca una NullReferenceException. Sin embargo, puede utilizar cadenas nulas en operaciones de concatenación y comparación con otras cadenas. Los siguientes ejemplos ilustran algunos casos en los que una referencia a una cadena nula hace y no provoca que se lance una excepción:
Las operaciones de cadenas en .NET están altamente optimizadas y, en la mayoría de los casos, no afectan significativamente el rendimiento. Sin embargo, en algunos escenarios, como bucles que se ejecutan cientos o miles de veces, las operaciones de cadenas pueden afectar el rendimiento. La clase StringBuilder crea un búfer de cadenas que ofrece un mejor rendimiento para estos casos. La cadena StringBuilder también le permite reasignar caracteres individuales, algo que el tipo de datos de cadena incorporado no admite.
Vamos a hacer una web Api con F# y Entity Framework.
Primero hacer la web Api e instalar Entity Framework.
dotnet new webapi --language "F#"
dotnet add package Swashbuckle.AspNetCore --version 5.6.3
dotnet new tool-manifest
dotnet tool install dotnet-ef
dotnet tool install paket
dotnet paket convert-from-nuget
dotnet paket add Microsoft.EntityFrameworkCore.Sqlite
dotnet paket add EntityFrameworkCore.FSharp
code .
Ahora creamos el modelo:
Hice un archivo Prueba.fs :
Y hacemos el dbcontext :
Ahora debemos indicar que compile estas clases agregando estas entradas en el fsproj :
Luego compilamos
dotnet build
Si funciona debemos hacer la migración :
dotnet ef migrations add Initial
Y ahora agregamos la migración a fsproj :
Y ahora creamos la base :
dotnet ef database update
Y ahora agregamos el context a el Startup.fs :
Y luego hacemos el controler :
Y listo!
dotnet run
Yo agregue swagger para mayor detalles dejo link de github:
https://github.com/emanuelpeg/FsharpWebApiExample
Generics introduce el concepto de parámetros de tipo en .NET, lo que hace posible diseñar clases y métodos que difieren la especificación de uno o más tipos hasta que la clase o método sea declarado e instanciado por el código del cliente. Veamos un ejemplo:
Las clases y métodos genéricos combinan la reutilización, la seguridad de tipos y la eficiencia de una manera que sus contrapartes no genéricas no pueden. Los genéricos se utilizan con mayor frecuencia con las colecciones y los métodos que operan en ellas. El espacio de nombres System.Collections.Generic contiene varias clases de colección basadas en genéricos. Las colecciones no genéricas, como ArrayList, no se recomiendan y se mantienen por motivos de compatibilidad.
Veamos un ejemplo:
Un método declarado con los parámetros de tipo para su tipo o parámetros de retorno se denomina método genérico.
Los métodos AddorUpdate () y GetData () son métodos genéricos. El tipo de datos real del parámetro del elemento se especificará en el momento de instanciar la clase DataStore <T>, como se muestra a continuación.
Una clase no genérica puede incluir métodos genéricos especificando un parámetro de tipo entre paréntesis angulares con el nombre del método, como se muestra a continuación.
La estructura DateTime incluye los siguientes métodos para convertir una fecha y hora en una cadena.
Método | Descripción |
ToString | Convierte un valor DateTime en una cadena en el formato especificado de la referencia cultural actual. Permite pasar el formato de fecha por parámetros. |
ToShortDateString | formato M/d/yyyy |
ToShortTimeString | formato h:mm:ss |
ToLongDateString | formato dddd, MMMM d, yyyy |
ToLongTimeString | formato h:mm:ss tt |
Veamos un ejemplo:
Ma llego este mail con un libro gratuito :
Level up on NGINX with this free O'Reilly eBook, updated for 2021. Get sample configurations for the most popular NGINX deployments: load balancing, caching, security, cloud deployment, automation, containers and microservices, high availability, performance tuning, and more. In this ebook you will learn:
| |
DataTime dt = new DataTime()
El valor predeterminado y más bajo de un objeto DateTime es el 1 de enero de 0001 00:00:00 (medianoche). El valor máximo puede ser el 31 de diciembre de 9999 a las 11:59:59 p.m.
La estructura DateTime incluye campos, propiedades y métodos estáticos. El siguiente ejemplo muestra propiedades y campos estáticos:
Con DateTime.Now obtenemos la fecha y la hora actual y con DateTime.Today el día actual. Utc es tiempo universal coordinado que tiene la maquina según su configuración.
TimeSpan es una estructura que se utiliza para representar el tiempo en días, horas, minutos, segundos y milisegundos.
La estructura DateTime sobrecarga los operadores +, -, ==,! =,>, <, <=,> = Para facilitar la suma, resta y comparación de fechas. Estos facilitan el trabajo con fechas.
La pregunta que se me ocurre, luego de ser contestada la del titulo, es como se pronuncia en castellano? dotnetMiau? jeje
.NET MAUI es de open source y es la evolución de Xamarin.Forms, extendido desde escenarios móviles a de escritorio, con controles de IU reconstruidos desde cero para rendimiento y extensibilidad.
Con .NET MAUI, puede crear aplicaciones multiplataforma con un solo proyecto, pero puede agregar código fuente y recursos específicos de la plataforma si es necesario. Uno de los objetivos clave de .NET MAUI es permitirle implementar la mayor cantidad posible de la lógica de la aplicación y el diseño de la interfaz de usuario en una única base de código.
Dejo link: https://github.com/dotnet/maui
StringBuilder, Representa una cadena mutable. Esta clase no puede heredarse.
StringBuilder es un objeto que permite el manejo de string sin consumir tanta memoria. Normalmente se utiliza como un buffer donde podemos acumular string, dado que este objeto es mutable, utiliza menos memoria que un string.
El siguiente ejemplo ilustra cómo un objeto StringBuilder asigna nueva memoria y aumenta su capacidad dinámicamente a medida que se expande la cadena asignada al objeto. El código crea un objeto StringBuilder llamando a su constructor predeterminado (sin parámetros). La capacidad predeterminada de este objeto es de 16 caracteres y su capacidad máxima es de más de 2 mil millones de caracteres. Añadiendo la cadena "Esta es una oración". da como resultado una nueva asignación de memoria porque la longitud de la cadena (19 caracteres) excede la capacidad predeterminada del objeto StringBuilder. La capacidad del objeto se duplica a 32 caracteres, se agrega la nueva cadena y la longitud del objeto ahora es igual a 19 caracteres. Luego, el código agrega la cadena "Esta es una oración adicional". al valor del objeto StringBuilder 11 veces. Siempre que la operación de agregar hace que la longitud del objeto StringBuilder exceda su capacidad, su capacidad existente se duplica y la operación de agregar tiene éxito.
Y el resultado será :
StringBuilder provee un conjunto de métodos para acumular strings, metodo Append y para transformar un StringBuilder a string utilizamos el método ToString
Dear fellow geek,
Python is a widely used high-level, general-purpose, interpreted, dynamic programming language. Its design philosophy emphasizes code readability, and its syntax allows programmers to express concepts in fewer lines of code than would be possible in languages such as C++ or Java. The language provides constructs intended to enable clear programs on both a small and large scale.
Python supports multiple programming paradigms, including object-oriented, imperative and functional programming or procedural styles. It features a dynamic type system and automatic memory management and has a large and comprehensive standard library.
In this ebook, we provide a compilation of Python examples that will help you kick-start your own projects. We cover a wide range of topics, from multi-threaded programming to web development with Django. With our straightforward tutorials, you will be able to get your own projects up and running in minimum time.
String tiene diferentes métodos que permiten interactuar con él y nos facilitan el desarrollo, veamos un ejemplo :
Además podemos acceder de modo solo lectura a caracteres individuales con la notación [] , como en el siguiente ejemplo: