Documentación pública · v1.0.0

04 · SDK oficiales

MSD-04-SDK · SDK oficiales

Una API excelente merece un SDK excelente.

Toda la operación. Una sola plataforma.


Objetivo del capítulo

Definir la estrategia oficial para los SDK Roustix — bibliotecas nativas que encapsulan autenticación, consumo de la API, manejo de errores y buenas prácticas definidas en MAG.

Los SDK eliminan la necesidad de construir manualmente solicitudes HTTP y garantizan que todas las integraciones utilicen el mismo contrato.

MSD-04 convierte la API documentada en una experiencia de desarrollo lista para usar.

MSD-03 · OpenAPI 3.1 · Developer Portal


1 · Filosofía

El SDK no reemplaza la API.

La API sigue siendo el contrato oficial.

El SDK únicamente ofrece una forma más cómoda y segura de consumir ese contrato.

Aplicación
      │
      ▼
 Roustix SDK
      │
      ▼
   OpenAPI
      │
      ▼
  REST API

Toda mejora del SDK debe mantenerse alineada con MAG.

PrincipioRegla
API primeroEl contrato vive en MAG + OpenAPI
SDK idiomáticoCada lenguaje expone la misma semántica, sintaxis nativa
Sin atajosNo omitir tenant, JWT ni errores estructurados

2 · Lenguajes oficiales

MSD v1.0 contempla tres SDK oficiales.

LenguajePaqueteEstado
Pythonroustix📋 Implementación pendiente
JavaScript / TypeScript@roustix/sdk📋 Implementación pendiente
PHProustix/sdk📋 Implementación pendiente

Roadmap futuro:

  • Java
  • C# (.NET)
  • Go

3 · Instalación

Python:

pip install roustix

JavaScript:

npm install @roustix/sdk

PHP:

composer require roustix/sdk

Todos los paquetes siguen el mismo versionado que MAG (1.x → MAG v1).


4 · Inicialización

Ejemplo conceptual — base URL incluye /api/v1:

Python:

from roustix import RoustixClient

client = RoustixClient(
    token="JWT",
)

JavaScript:

import { RoustixClient } from "@roustix/sdk";

const client = new RoustixClient({
  baseUrl: process.env.ROUSTIX_API,
  token: process.env.ROUSTIX_TOKEN,
});

PHP:

use Roustix\Client;

$client = new Client(
    token: getenv('ROUSTIX_TOKEN'),
);

Variables de entorno recomendadas: ROUSTIX_API · ROUSTIX_TOKEN (MAG-09).


5 · Organización

Todos los SDK exponen la misma estructura — alineada a MAG-04:

client
│
├── auth
├── me
├── maintenance
│     ├── assets
│     ├── work_orders
│     └── schedules
├── inventory
│     ├── products
│     └── stock
├── purchasing
├── sales
├── crm
└── admin

Ejemplos:

client.maintenance.assets.list()
client.inventory.products.get(25)
client.auth.login(username="...", password="...", empresa_slug="...")

Convenciones de nombres en superficie del SDK → MAG-05 (contrato JSON en inglés snake_case; JS puede exponer camelCase en props con mapeo interno).


6 · Manejo automático

El SDK administra automáticamente:

ResponsabilidadReferencia MAG
JWTHeader Authorization: Bearer · MAG-02
HeadersContent-Type · Accept · User-Agent
JSONSerialización / deserialización
TimeoutsMAG-10
Reintentos429 · 503 · backoff exponencial
Errores MAG-06error.code → excepciones
User-Agentroustix-python/1.0.0 (por lenguaje)

El desarrollador trabaja únicamente con objetos y métodos — no con URLs ni headers crudos.


7 · Manejo de errores

Los errores MAG se convierten en excepciones tipadas.

Python:

from roustix.errors import ResourceNotFoundError

try:
    client.maintenance.assets.get(500)
except ResourceNotFoundError as exc:
    print(exc.code)  # RESOURCE_NOT_FOUND

JavaScript:

try {
  await client.maintenance.assets.get(500);
} catch (error) {
  if (error instanceof ResourceNotFoundError) {
    console.log(error.code);
  }
}

PHP:

try {
    $client->maintenance->assets->get(500);
} catch (ResourceNotFoundException $e) {
    echo $e->getCode(); // RESOURCE_NOT_FOUND
}

Todos los códigos provienen del catálogo MAG-06. El cliente nunca interpreta error.message.


8 · Generación

Los SDK se generan parcialmente desde OpenAPI (MSD-03):

OpenAPI
     │
     ▼
 Generador
     │
     ▼
 SDK Base
     │
     ▼
Wrappers Roustix
CapaContenido
GeneradoModels · paths · request/response types
Manual (wrappers)Auth flow · retries · pagination helpers · ergonomía

La generación automática evita inconsistencias entre lenguajes.

Herramientas previstas: OpenAPI Generator · Speakeasy · openapi-typescript (tipos JS).


9 · Versionado

Los SDK utilizan el mismo ciclo de vida que MAG (MAG-07):

SDKAPI
1.xMAG v1
2.xMAG v2

Nunca mezclar varias versiones de API dentro del mismo major del SDK.

Bump SDKCuándo
MAJORMAG v2 · breaking en contrato
MINORNuevos recursos en MAG v1
PATCHFixes sin cambio de contrato

10 · Ejemplo completo

Python:

from roustix import RoustixClient

client = RoustixClient(
    token="JWT",
)

assets = client.maintenance.assets.list()

for asset in assets:
    print(asset.name)

Sin construir manualmente requests HTTP.

Estado: ejemplo ilustrativo · paquete roustix en implementación.

→ MAG-09 · Ejemplos


11 · Publicación

PlataformaPaqueteEstado
PyPIroustix📋
npm@roustix/sdk📋
Packagistroustix/sdk📋

Repositorios oficiales (planificados):

  • github.com/roustix/sdk-python
  • github.com/roustix/sdk-js
  • github.com/roustix/sdk-php

Publicación detallada → MSD-09 · Publicación

Código fuente local de referencia → docs/sdk/


12 · Buenas prácticas

#Regla
1No modificar el SDK generado manualmente sin actualizar OpenAPI
2Toda mejora permanente debe originarse en OpenAPI
3Mantener el mismo modelo de objetos entre lenguajes
4Respetar MAG-06 para manejo de errores
5Versionar junto con MAG
6Publicar ejemplos ejecutables para cada lenguaje
7Usar el SDK oficial cuando exista — no construir URLs a mano (MAG-09)

Filosofía del capítulo

Una buena API permite integrar una plataforma.

Un buen SDK hace que esa integración sea natural.

El desarrollador no debería preocuparse por construir solicitudes HTTP, gestionar encabezados o interpretar respuestas. Su trabajo debe centrarse en el negocio, mientras el SDK aplica automáticamente el contrato definido por MAG.

MSD-04 convierte la API de Roustix en una experiencia de desarrollo idiomática, consistente y lista para producción.