Plan de desarrollo ein-cli

Descripción general del proyecto

ein-cli es una herramienta de interfaz dual que proporciona comandos CLI para automatización/scripting y una TUI interactiva para uso exploratorio. La herramienta se centra en realizar solicitudes de API REST con una interfaz fácil de usar.

Concepto central

  • Modo CLI: ejecución directa de comandos con indicadores (cuando se proporcionan argumentos)
  • Modo TUI: interfaz interactiva basada en menús (predeterminada cuando no se proporcionan indicadores)
  • Núcleo compartido: ambas interfaces utilizan la misma lógica empresarial y cliente API

Pila de tecnología

Componentes de la pila de encantos

  • Cobra: marco CLI para comandos y banderas
  • Bubbletea: marco TUI (patrón Modelo-Vista-Actualización)
  • Burbujas: componentes TUI prediseñados (listas, entradas, controles giratorios)
  • Brillo de labios: Estilismo y diseño
  • Eh: formularios y entradas avanzados

Bibliotecas adicionales

  • Resty o net/http: cliente API REST
  • Viper: Gestión de configuración
  • Logrus/Zerolog: Registro

Estructura del proyecto

ein-cli/
├── go.mod
├── go.sum
├── main.go                    # Entry point - determines CLI vs TUI
├── README.md
├── .gitignore
│
├── cmd/                       # CLI commands (Cobra)
│   ├── root.go               # Root command setup
│   ├── config.go             # Config commands
│   ├── api.go                # API-related commands
│   └── version.go            # Version command
│
├── internal/
│   ├── config/
│   │   ├── config.go         # Configuration structure
│   │   └── loader.go         # Config loading/saving
│   │
│   ├── client/
│   │   ├── client.go         # HTTP client wrapper
│   │   ├── auth.go           # Authentication handling
│   │   ├── endpoints.go      # API endpoint definitions
│   │   └── requests.go       # Request/response handling
│   │
│   ├── core/
│   │   ├── service.go        # Business logic service
│   │   └── validator.go      # Input validation
│   │
│   └── models/
│       ├── api.go            # API request/response models
│       ├── config.go         # Configuration models
│       └── errors.go         # Error types
│
├── tui/
│   ├── app.go                # Main TUI application
│   ├── router.go             # Screen navigation router
│   ├── keys.go               # Global key bindings
│   │
│   ├── components/
│   │   ├── menu.go           # Menu component
│   │   ├── form.go           # Form component
│   │   ├── loader.go         # Loading spinner
│   │   ├── confirm.go        # Confirmation dialog
│   │   └── result.go         # Result display
│   │
│   ├── screens/
│   │   ├── main_menu.go      # Main menu screen
│   │   ├── settings.go       # Settings screen
│   │   ├── api_form.go       # API request form
│   │   ├── results.go        # Results viewer
│   │   └── help.go           # Help screen
│   │
│   └── styles/
│       ├── theme.go          # Color themes
│       ├── layout.go         # Layout styles
│       └── components.go     # Component styles
│
└── pkg/
    └── utils/
        ├── format.go         # Data formatting
        └── helpers.go        # Utility functions

Diseño de arquitectura

Lógica del punto de entrada

package main
 
import (
    "os"
    "ein-cli/cmd"
    "ein-cli/tui"
)
 
func main() {
    // If arguments provided, use CLI mode
    if len(os.Args) > 1 {
        cmd.Execute()
        return
    }
 
    // Otherwise, launch TUI
    app := tui.NewApp()
    if err := app.Run(); err != nil {
        os.Exit(1)
    }
}

Capa CLI (comandos Cobra)

// cmd/root.go
var rootCmd = &cobra.Command{
    Use:   "ein",
    Short: "Ein CLI tool",
    Long:  "A CLI tool with TUI interface for API interactions",
}
 
var apiCmd = &cobra.Command{
    Use:   "api [endpoint]",
    Short: "Make API requests",
    Run: func(cmd *cobra.Command, args []string) {
        // Use shared service layer
        service := core.NewService(client.New())
        result, err := service.MakeRequest(endpoint, data)
        // Handle result
    },
}

Capa TUI (Bubbletea)

// tui/app.go
type App struct {
    program   *tea.Program
    router    *Router
    service   *core.Service
    config    *config.Config
}
 
func (a *App) Run() error {
    model := NewMainModel(a.service, a.config)
    a.program = tea.NewProgram(model, tea.WithAltScreen())
    _, err := a.program.Run()
    return err
}

Enrutador de navegación

// tui/router.go
type Screen int
 
const (
    MainMenu Screen = iota
    APIForm
    Settings
    Results
    Help
)
 
type Router struct {
    current    Screen
    previous   []Screen
    components map[Screen]tea.Model
}
 
func (r *Router) Navigate(screen Screen) tea.Cmd {
    r.previous = append(r.previous, r.current)
    r.current = screen
    return r.components[screen].Init()
}

Diseño de flujo de pantalla TUI

┌─────────────────┐
│   Main Menu     │
├─────────────────┤
│ > API Requests  │ ──┐
│   Settings      │   │
│   Help          │   │
│   Exit          │   │
└─────────────────┘   │
                      │
                      ▼
               ┌─────────────────┐
               │  API Form       │
               ├─────────────────┤
               │ Endpoint: _____ │
               │ Method: [GET▼]  │
               │ Headers:        │
               │ ┌─────────────┐ │
               │ │ Key: Value  │ │
               │ └─────────────┘ │
               │ Body:           │
               │ ┌─────────────┐ │
               │ │ JSON data   │ │
               │ └─────────────┘ │
               │ [Submit] [Back] │
               └─────────────────┘
                      │
                      ▼
               ┌─────────────────┐
               │ Loading...      │
               │     ⠋          │
               └─────────────────┘
                      │
                      ▼
               ┌─────────────────┐
               │  Results        │
               ├─────────────────┤
               │ Status: 200 OK  │
               │ Time: 245ms     │
               │                 │
               │ Response:       │
               │ ┌─────────────┐ │
               │ │ {           │ │
               │ │   "data":.. │ │
               │ │ }           │ │
               │ └─────────────┘ │
               │ [Back] [Save]   │
               └─────────────────┘

Funciones clave para implementar

Funciones principales

  1. Formularios dinámicos: use Huh para entradas de formularios complejos
  2. Historial de solicitudes: almacena y reproduce solicitudes anteriores
  3. Gestión de configuración: guardar configuraciones del servidor, tokens de autenticación
  4. Formato de respuesta: impresión JSON bonita, resaltado de sintaxis
  5. Manejo de errores: visualización elegante del error en TUI

Funciones de experiencia de usuario

  1. Navegación con el teclado: atajos similares a los de Vim
  2. Temas: Compatibilidad con el modo claro/oscuro
  3. Sistema de ayuda: pantallas de ayuda contextuales
  4. Plantillas de solicitud: plantillas de solicitud preconfiguradas
  5. Exportar/Importar: guardar y cargar colecciones de solicitudes

Funciones avanzadas

  1. Autenticación: compatibilidad con varios métodos de autenticación (portador, básico, clave API)
  2. Variables de entorno: soporte para sustitución de variables
  3. Validación de respuesta: validación de esquema para respuestas
  4. Encadenamiento de solicitudes: utilice datos de respuesta en solicitudes posteriores

Fases de desarrollo

Fase 1: Fundación (Semana 1-2)

Objetivo: Estructura básica y navegación.

  • Configurar la estructura del proyecto
  • Inicializa go.mod con dependencias
  • Implementar comandos CLI básicos con Cobra
  • Crea una navegación TUI sencilla con Bubbletea
  • Sistema básico de enrutamiento de pantalla

Fase 2: Funcionalidad principal (semana 3-4)

Objetivo: cliente HTTP y solicitudes API básicas

  • Implementación de cliente HTTP [ ] con autenticación
  • Formularios de solicitud de API básica [ ] usando Huh
  • Visualización de respuesta con formato JSON
  • Manejo de errores para solicitudes de red
  • Compatibilidad con archivos de configuración [ ]

Fase 3: UX mejorada (semana 5-6)

Objetivo: Experiencia de usuario mejorada- [ ] Historial de solicitudes y persistencia

  • Validación de formulario avanzada
  • Resaltado de sintaxis de respuesta [ ]
  • Estados de carga y controles giratorios
  • Atajos de teclado y sistema de ayuda

Fase 4: Funciones avanzadas (semana 7-8)

Objetivo: funciones de usuario avanzado

  • Solicitar plantillas y colecciones
  • Soporte de variables de entorno [ ]
  • Funcionalidad de exportación/importación
  • Capacidades de encadenamiento de respuesta [ ]
  • Métodos de autenticación avanzados

Fase 5: polaco (semana 9-10)

Objetivo: Preparación para la producción

  • Estilo y temas (modo claro/oscuro)
  • Sistema de ayuda integral
  • Error al manejar el refinamiento
  • Optimización del rendimiento
  • Documentación y ejemplos

Consideraciones técnicas

Gestión estatal

  • Utilice el patrón Modelo-Vista-Actualización de Bubbletea
  • Estado centralizado en el modelo de aplicación principal.
  • Estado específico de la pantalla en modelos de pantalla individuales

Persistencia de datos

  • Archivos de configuración en formato JSON/YAML
  • Historial de solicitudes almacenado localmente
  • Soporte para múltiples perfiles de configuración.

Manejo de errores

  • Degradación elegante para problemas de red.
  • Mensajes de error fáciles de usar en TUI
  • Propagación adecuada de errores en modo CLI

Rendimiento

  • Carga diferida de pantallas y componentes.
  • Representación eficiente con mínimos redibujados
  • Procesamiento en segundo plano para solicitudes de larga duración.

Estrategia de prueba

  • Pruebas unitarias para lógica de negocios.
  • Pruebas de integración para cliente API.
  • Pruebas de componentes TUI cuando sea posible.
  • Prueba de comando CLI

Métricas de éxito

Usabilidad

  • Flujo de navegación intuitivo
  • Tiempos de respuesta rápidos (<100 ms para interacciones de UI)
  • Borrar mensajes de error y comentarios.

Funcionalidad

  • Soporte para todos los métodos HTTP principales
  • Manejo adecuado de varios tipos de contenido.
  • Gestión de configuración confiable

Experiencia del desarrollador

  • Estructura de código limpia y mantenible
  • Documentación completa
  • Fácil de ampliar con nuevas funciones

Mejoras futuras

Características potenciales

  • Soporte GraphQL
  • Conexiones WebSocket
  • Sistema de complementos para autenticación personalizada
  • Funciones de colaboración en equipo
  • Integración de documentación API
  • Funcionalidad de servidor simulado

Optimizaciones de rendimiento

  • Solicitar almacenamiento en caché
  • Ejecución de solicitudes simultáneas
  • Transmisión de respuesta para grandes cargas útiles

Este plan proporciona una hoja de ruta integral para desarrollar ein-cli con interfaces CLI y TUI, lo que garantiza una herramienta sólida y fácil de usar para las interacciones API.