Saltar al contenido principal
A medida que nuestra API pública evoluciona para cumplir con nuevos requisitos y mejorar la funcionalidad, los integradores y clientes necesitan adaptarse sin problemas. Un patrón clave que respalda la resiliencia a tales cambios es el Lector Tolerante. Al adoptar el patrón de Lector Tolerante, las integraciones pueden manejar mejor la nueva información sin actualizaciones frecuentes. Este enfoque reduce las necesidades de mantenimiento y mejora la resiliencia, creando una experiencia de integración más fluida.

¿Qué es un lector tolerante?


El patrón de Lector Tolerante es un enfoque de diseño de integración donde un cliente que consume datos está construido para manejar cambios potenciales—como campos agregados o modificaciones menores de estructura—con gracia. Este patrón promueve la compatibilidad hacia adelante, reduciendo la necesidad de actualizaciones inmediatas cada vez que los datos o el servicio evolucionan.

Escenario del mundo real


Considere una solicitud a GET /organizations/{organization_id}. Inicialmente, la respuesta podría ser:
{
    "id": "cc15194a-6bc9-4ebb-b15d-43411a54ba4b",
    "parentOrganizationId": null,
    "legalName": "Empresa Teste Ltda",
    "legalDocument": "86820799000188",
    "metadata": null,
    "status": {
        "code": "ACTIVE",
        "description": null
    },
    "createdAt": "2024-02-08T16:59:31+0300",
    "updatedAt": "2024-02-08T16:59:31+0300",
    "deletedAt": null
}
Posteriormente, se pueden agregar campos como doingBusinessAs y address:
{
    "id": "cc15194a-6bc9-4ebb-b15d-43411a54ba4b",
    "parentOrganizationId": null,
    "legalName": "Empresa Teste Ltda",
    "doingBusinessAs": "Empresa Teste",
    "legalDocument": "86820799000188",
    "address": {
        "line1": "Rua Botucatu, 10",
        "line2": "Casa B",
        "zipCode": "04023060",
        "city": "São Paulo",
        "state": "SP",
        "country": "BR"
    },
    "metadata": null,
    "status": {
        "code": "ACTIVE",
        "description": null
    },
    "createdAt": "2024-02-08T16:59:31+0300",
    "updatedAt": "2024-02-08T16:59:31+0300",
    "deletedAt": null
}
Un cliente que sigue el patrón de Lector Tolerante manejaría los campos adicionales sin problemas, asegurando la funcionalidad continua.

Implementación de un lector tolerante


A continuación se muestra un ejemplo de fragmento de código Python que procesa campos adicionales con gracia, teniendo en cuenta los cambios en el payload.
def fetch_organization_info(organization_id):
    response = requests.get(f"{host}/organization/{organization_id}")
    org_info = response.json()

    # Fetch required fields
    legal_name = org_info.get("legalName", "Unknown")
    legal_document = org_info.get("legalDocument", "No document provided")

    # Handle optional fields
    doing_business_as = org_info.get("doingBusinessAs")

    # Nested address structure
    address_info = org_info.get("address", {})
    line1 = address_info.get("line1", "Address not provided")
    city = address_info.get("city", "City not provided")
    state = address_info.get("state", "State not provided")
    country = address_info.get("country", "Country not provided")

    # Display information
    print(f"Legal Name: {legal_name}, Legal Document: {legal_document}")
    print(f"Doing Business As: {doing_business_as}")
    print(f"Address: {line1}, {city}, {state}, {country}")

# Example usage
fetch_organization_info("cc15194a-6bc9-4ebb-b15d-43411a54ba4b")
En este ejemplo, se utilizan métodos get para acceder a los valores de forma segura. Esto permite flexibilidad si se introducen nuevos campos, como phoneNumber, ya que el código permanece funcional incluso si falta un campo.