Saltar al contenido principal
Este texto se enfoca en implementar un enfoque tolerante en la integración de APIs. A medida que nuestra API pública evoluciona para satisfacer nuevos requisitos y mejorar la funcionalidad, los integradores y clientes necesitan adaptarse sin problemas. Un patrón clave que soporta la resiliencia ante 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 se construye para manejar cambios potenciales—como campos agregados o modificaciones menores en la estructura—de manera elegante. 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


Considera 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, campos como doingBusinessAs y address pueden ser agregados:
{
    "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.

Implementar un lector tolerante


A continuación se muestra un ejemplo de código Python que procesa campos adicionales de manera elegante, teniendo en cuenta los cambios en la carga útil.
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 de forma segura a los valores. Esto permite flexibilidad si se introducen nuevos campos, como phoneNumber, ya que el código permanece funcional incluso si falta un campo.