Tuesday, April 2, 2024

API Gateway with ASP.NET Core


Grandes preguntas:

  • ¿Repites mucho código en cada nuevo microservicio?
  • ¿Haces que tus frontends llamen múltiples endpoints para obtener lo que realmente necesitan?

Flujo de llamadas sin API Gateway

  • Problemas de latencia
  • Menos seguridad


Flujo de llamadas con API Gateway

  • El API Gateway sería un microservico más
  • Se mejora la latencia
  • Se incrementa la seguridad

API Gateway

  • Es un reverse proxy que obtendrá las peticiones del cliente y las redireccionará al microservicio/API que está configurado para conectarse para luego procesar la respuesta y devolverla al cliente. 
  • Entre medias, se le puede añadir autenticación, autorización o filtros para validar la petición antes de enviarla a los microservicios.
  • Otras características: rate limit, cache, header transformation, etc.

Algunas API Gateways en el mercado



Demo

  • Crear un proyecto Web API
  • La carpeta controllers no se necesita. La eliminamos.
  • Instalar el paquete de ocelot
  • Configuración en Program.cs
  • Agregar archivo de configuración ocelot.json
    • Routes: Aquí configuramos las rutas a nuestros microservicios.
      • UpstreamPathTemplate: Este el endpoint el cual se va exponer a través del API Gateway
      • UpstreamHttpMethod: El método para invocar el endpoint
      • DownstreamHostAndPorts: Indicar el endpoint hacia donde tiene que ir
      • DownstreamPathTemplate: El path de hacia donde hay que ir
    • GlobalConfiguration: Aquí indicamos el punto de entrada a nuestra API Gateway (este dato se saca desde launchSettings.json (en iisExpress).

Resources:

Sunday, January 28, 2024

Data Seeding

El "Data Seeding" es el  proceso de proporcionar datos iniciales o de muestra a una base de datos cuando esta se crea por primera vez o cuando se aplican migraciones para actualizar su esquema.

Este proceso es especialmente útil en situaciones donde necesitas que la base de datos tenga datos predeterminados para que la aplicación funcione correctamente desde el principio. También es útil para proporcionar datos de muestra en un entorno de desarrollo o para realizar pruebas.

Al realizar "Data Seeding" en Entity Framework Core, generalmente se utiliza el método HasData en el método OnModelCreating de la clase que hereda de DbContext. Este método se utiliza para especificar los datos que se deben insertar en la base de datos durante la creación o actualización de la misma.


Wednesday, January 3, 2024

Designing RESTful Web APIs

Source: https://app.pluralsight.com/library/courses/designing-restful-web-apis/table-of-contents

I. Intro

  • Fundamentals of HTTP and REST
  • Designing the entire API
  • Why versioning is so important
  • Different security considerations

II. What is REST?

The history of distributed APIs

HTTP
How does HTTP work?


The request deconstructed





The response deconstructed





REST

What is REST?
 - REpresentational State Transfer
- Separation of Client and Server
- Server Requests are Stateless
- Cacheable Requests
- Uniform Interface

III. Designing a RESTful API

Intro
  • Designing the API First
  • Nouns and Verbs
  • URI Design
  • Status Codes
  • Designing Results

Design your API first


¿Por qué?
  • Can't fix an API after publishing
  • Too easy to add ad-hoc endpoints
  • Helps understand the requirements
  • Well-designed API can mature
REST APIs have several parts

What are URIs? 
  • URIs are just paths to resources. 
  • Example: api.yourserver.com/people

API Design
  • Nouns are good, and verbs are bad.



What are "resources"?
  • Collections of nouns


  • Complex objects

Identifiers in URIs
  • Use unique identifiers
  • Does not have to be "primary keys"

Query Strings
  • Use for non-resource properties
  • Format, sorting, searching, etc. 

Design Verbs
  • GET: Retrieve a resource
  • POST: Add a new resource
  • PUT: Update an existing resource
  • PATCH: Update a resource with changes
  • DELETE: Remove the existing resource

Idempotency in Action
  • Operation that can be applied multiple times without changing the result
  • Operations result in same side effect
    • GET, PUT, PATCH and DELETE
  • POST is not idempotent

Designing Results
  • Members Names
    • Shouldn't expose server details.
    • I prefer camelCasing
  • Designing Collections


Formatting Results




Hypermedia
  • Allows results to be self-describing
  • Allows programatic navigation
  • Adds complexity

  • Hypermedia ca be helpful, but pragmatism means that most projects don't need it.

IV. Handling more complex scenarios in your API

  • abc

Versioning your API

  • abc

Locking down your API

  • abc


Thursday, November 23, 2023

Build for Operations

Algunas propiedades del software desarrollado pueden tener un impacto muy importante en la operación del software.

  • Threat Modeling
  • Configuration
  • Secrets
  • Paranoiac Telemetry
  • Logging
  • Metrics and Observability
  • Monitoring and Alerting

Fuente: The Art of Agile Development, 2nd Edition


Mensajes de Log



  • Los mensajes de log sirven para diagnosticar un comportamiento no esperado.
  • Hay que tener la precaución de implementar los mensajes de log antes de enfrentar los problemas. Es decir, mientras estamos contruyendo la aplicación. De tal forma, que cuando surjan los problemas podamos tener herramientas de diagnóstico.
  • El diseño básico consiste en que mi código escriba mensajes en el Log a través de un Logger. Un logger es un componente de infraestructura
  • Nuestra aplicación le va a enviar distintos tipos de mensajes al Logger: error, warn, info, debug, trace, fatal, etc.

  • Todo los componentes de Log siguen el mismo diseño conceptual, es decir, en términos de los conceptos que maneja: Level, Formatter y Handler.

  • Handler: Determina el destino del mensaje. Ejemplo: archivo, consola, etc. 
  • Formatter: Formatea el mensaje.
  • Level



Fin


Tuesday, November 7, 2023

system design interviews

Aquí dejo unos links interesantes para prepararse para las entrevistas de diseño de sistemas:

  • https://www.karanpratapsingh.com/courses/system-design
  • https://blog.bytebytego.com/



API Gateway with ASP.NET Core

Grandes preguntas: ¿Repites mucho código en cada nuevo microservicio? ¿Haces que tus frontends llamen múltiples endpoints para obtener lo qu...