rust-best-practices

Estándares de codificación idiomática de Rust basados en el manual de mejores prácticas de Apollo GraphQL. Cubre nueve áreas principales: estilos y modismos de codificación, linting con clippy, optimización de rendimiento, manejo de errores, patrones de prueba, genéricos y despacho, patrón de estado de tipo, documentación y seguridad de punteros. Enfatiza el préstamo sobre la clonación, el manejo de errores basado en Result con thiserror/anyhow, y la creación de perfiles de rendimiento con compilaciones release. Incluye orientación de referencia rápida sobre patrones de propiedad, prevención de pánicos,...

npx skills add https://github.com/apollographql/skills --skill rust-best-practices

Rust Best Practices

Apply these guidelines when writing or reviewing Rust code. Based on Apollo GraphQL's Rust Best Practices Handbook.

Best Practices Reference

Before reviewing, familiarize yourself with Apollo's Rust best practices. Read ALL relevant chapters in the same turn in parallel. Reference these files when providing feedback:

Quick Reference

Borrowing & Ownership

  • Prefer &T over .clone() unless ownership transfer is required
  • Use &str over String, &[T] over Vec<T> in function parameters
  • Small Copy types (≤24 bytes) can be passed by value
  • Use Cow<'_, T> when ownership is ambiguous

Error Handling

  • Return Result<T, E> for fallible operations; avoid panic! in production
  • Never use unwrap()/expect() outside tests
  • Use thiserror for library errors, anyhow for binaries only
  • Prefer ? operator over match chains for error propagation

Performance

  • Always benchmark with --release flag
  • Run cargo clippy -- -D clippy::perf for performance hints
  • Avoid cloning in loops; use .iter() instead of .into_iter() for Copy types
  • Prefer iterators over manual loops; avoid intermediate .collect() calls

Linting

Run regularly: cargo clippy --all-targets --all-features --locked -- -D warnings

Key lints to watch:

  • redundant_clone - unnecessary cloning
  • large_enum_variant - oversized variants (consider boxing)
  • needless_collect - premature collection

Use #[expect(clippy::lint)] over #[allow(...)] with justification comment.

Testing

  • Name tests descriptively: process_should_return_error_when_input_empty()
  • One assertion per test when possible
  • Use doc tests (///) for public API examples
  • Consider cargo insta for snapshot testing generated output

Generics & Dispatch

  • Prefer generics (static dispatch) for performance-critical code
  • Use dyn Trait only when heterogeneous collections are needed
  • Box at API boundaries, not internally

Type State Pattern

Encode valid states in the type system to catch invalid operations at compile time:

struct Connection<State> { /* ... */ _state: PhantomData<State> }
struct Disconnected;
struct Connected;

impl Connection<Connected> {
    fn send(&self, data: &[u8]) { /* only connected can send */ }
}

Documentation

  • // comments explain why (safety, workarounds, design rationale)
  • /// doc comments explain what and how for public APIs
  • Every TODO needs a linked issue: // TODO(#42): ...
  • Enable #![deny(missing_docs)] for libraries

Más skills de apollographql

apollo-client
apollographql
Apollo Client es una biblioteca integral de gestión de estado para JavaScript que te permite manejar datos tanto locales como remotos con GraphQL. La versión 4.x trae un almacenamiento en caché mejorado, mejor soporte para TypeScript y compatibilidad con React 19.
official
apollo-client
apollographql
Guía completa para crear aplicaciones React con Apollo Client 4.x, que cubre consultas, mutaciones, almacenamiento en caché y gestión de estado. Compatible con múltiples frameworks y configuraciones de React: aplicaciones del lado del cliente (Vite, CRA), Next.js App Router con React Server Components, React Router 7 con SSR en streaming y TanStack Start. Incluye hooks para consultas (useQuery, useLazyQuery), mutaciones (useMutation) y patrones basados en Suspense (useSuspenseQuery, useBackgroundQuery) para React moderno 18+ y 19...
official
apollo-connectors
apollographql
Integra APIs REST en supergrafos GraphQL usando las directivas @source y @connect. Proporciona un proceso estructurado de 5 pasos: investigar la estructura de la API, implementar el esquema con directivas, validar mediante rover supergraph compose, ejecutar conectores y probar la cobertura. Soporta configuración de solicitudes que incluye encabezados, cuerpo de la carga útil, agrupación para patrones N+1 e inyección de variables de entorno mediante $env. Maneja el mapeo de respuestas con selección de campos, alias, subselecciones para datos anidados y entidad...
official
apollo-federation
apollographql
Apollo Federation permite componer múltiples APIs de GraphQL (subgrafos) en un supergrafo unificado.
official
apollo-ios
apollographql
Apollo iOS es un cliente GraphQL fuertemente tipado para plataformas Apple. Genera tipos Swift a partir de tus operaciones y esquema GraphQL, e incluye un cliente async/await, una caché normalizada (en memoria o respaldada por SQLite), un transporte HTTP basado en interceptores conectables que maneja consultas, mutaciones y suscripciones multiparte, y un transporte WebSocket opcional (graphql-transport-ws) que puede transportar cualquier tipo de operación.
official
apollo-kotlin
apollographql
Apollo Kotlin es un cliente GraphQL fuertemente tipado que genera modelos Kotlin a partir de tus operaciones y esquema GraphQL, que puede utilizarse en proyectos Android, JVM y Kotlin Multiplatform.
official
apollo-mcp-server
apollographql
Conecta agentes de IA a APIs de GraphQL a través del Protocolo de Contexto de Modelo con herramientas integradas de introspección y operación. Expone operaciones de GraphQL como herramientas MCP; admite tres fuentes de operación: archivos locales, colecciones de GraphOS Studio y manifiestos de consultas persistentes. Proporciona cuatro herramientas de introspección (introspect, search, validate, execute) para exploración de esquemas y pruebas de consultas ad-hoc; el modo de minificación reduce el uso de tokens con notación compacta. Autenticación configurable mediante encabezados estáticos,...
official
apollo-router
apollographql
Apollo Router es un enrutador de grafos de alto rendimiento escrito en Rust para ejecutar supergrafos de Apollo Federation 2. Se sitúa frente a tus subgrafos y maneja la planificación de consultas, ejecución y composición de respuestas.
official