> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Lector tolerante

> Un patrón de diseño de integración que absorbe los cambios de la API de Lerian sin romper tu código cliente.

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:

<CodeGroup>
  ```json JSON theme={null}
  {
      "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
  }
  ```
</CodeGroup>

Posteriormente, se pueden agregar campos como `doingBusinessAs` y `address`:

<CodeGroup>
  ```json JSON theme={null}
  {
      "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
  }
  ```
</CodeGroup>

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.

<CodeGroup>
  ```python Python theme={null}
  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")
  ```
</CodeGroup>

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.
