rust-best-practices

Các tiêu chuẩn mã hóa Rust thành ngữ dựa trên sổ tay thực hành tốt nhất của Apollo GraphQL. Bao gồm chín lĩnh vực cốt lõi: phong cách và thành ngữ mã hóa, linting clippy, tối ưu hóa hiệu suất, xử lý lỗi, mẫu kiểm thử, generics và dispatch, mẫu trạng thái kiểu, tài liệu và an toàn con trỏ. Nhấn mạnh việc mượn hơn là sao chép, xử lý lỗi dựa trên Result với thiserror/anyhow, và phân tích hiệu suất với bản phát hành. Bao gồm hướng dẫn tham khảo nhanh về các mẫu sở hữu, tránh panic,...

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

Thêm skills từ apollographql

apollo-client
apollographql
Apollo Client là một thư viện quản lý trạng thái toàn diện cho JavaScript, cho phép bạn quản lý cả dữ liệu cục bộ và từ xa với GraphQL. Phiên bản 4.x mang lại cải tiến về bộ nhớ đệm, hỗ trợ TypeScript tốt hơn và tương thích với React 19.
official
apollo-client
apollographql
Hướng dẫn toàn diện để xây dựng ứng dụng React với Apollo Client 4.x, bao gồm truy vấn, thay đổi dữ liệu, bộ nhớ đệm và quản lý trạng thái. Hỗ trợ nhiều framework và thiết lập React: ứng dụng phía client (Vite, CRA), Next.js App Router với React Server Components, React Router 7 với streaming SSR, và TanStack Start. Bao gồm các hooks cho truy vấn (useQuery, useLazyQuery), thay đổi dữ liệu (useMutation) và các mẫu dựa trên Suspense (useSuspenseQuery, useBackgroundQuery) cho React 18+ và 19 hiện đại...
official
apollo-connectors
apollographql
Tích hợp REST API vào siêu đồ thị GraphQL bằng cách sử dụng các chỉ thị @source và @connect. Cung cấp quy trình 5 bước có cấu trúc: nghiên cứu cấu trúc API, triển khai lược đồ với các chỉ thị, xác thực qua rover supergraph compose, thực thi các kết nối và kiểm tra phạm vi bao phủ. Hỗ trợ cấu hình yêu cầu bao gồm tiêu đề, tải trọng nội dung, xử lý hàng loạt cho các mẫu N+1 và tiêm biến môi trường qua $env. Xử lý ánh xạ phản hồi với lựa chọn trường, bí danh, lựa chọn phụ cho dữ liệu lồng nhau và thực thể...
official
apollo-federation
apollographql
Apollo Federation cho phép kết hợp nhiều API GraphQL (subgraph) thành một siêu đồ thị thống nhất.
official
apollo-ios
apollographql
Apollo iOS là một trình khách GraphQL có kiểu mạnh dành cho các nền tảng Apple. Nó tạo ra các kiểu Swift từ các thao tác và lược đồ GraphQL của bạn, đồng thời cung cấp một trình khách async/await, bộ nhớ đệm chuẩn hóa (trong bộ nhớ hoặc dùng SQLite), một lớp truyền tải HTTP dựa trên interceptor có thể cắm thêm để xử lý các truy vấn, biến đổi và đăng ký đa phần, cùng với một lớp truyền tải WebSocket tùy chọn (graphql-transport-ws) có thể mang bất kỳ loại thao tác nào.
official
apollo-kotlin
apollographql
Apollo Kotlin là một máy khách GraphQL được định kiểu mạnh, tạo ra các mô hình Kotlin từ các thao tác và lược đồ GraphQL của bạn, có thể được sử dụng trong các dự án Android, JVM và Kotlin Multiplatform.
official
apollo-mcp-server
apollographql
Kết nối các tác nhân AI với API GraphQL thông qua Giao thức Ngữ cảnh Mô hình (Model Context Protocol) với các công cụ nội quan và thao tác tích hợp. Hiển thị các thao tác GraphQL dưới dạng công cụ MCP; hỗ trợ ba nguồn thao tác: tệp cục bộ, bộ sưu tập GraphOS Studio và tệp kê khai truy vấn đã lưu. Cung cấp bốn công cụ nội quan (introspect, search, validate, execute) để khám phá lược đồ và kiểm tra truy vấn tùy chỉnh; chế độ thu nhỏ giảm mức sử dụng token với ký hiệu nhỏ gọn. Xác thực có thể cấu hình qua tiêu đề tĩnh,...
official
apollo-router
apollographql
Apollo Router là một bộ định tuyến đồ thị hiệu suất cao được viết bằng Rust để chạy các siêu đồ thị Apollo Federation 2. Nó nằm phía trước các đồ thị con của bạn và xử lý việc lập kế hoạch truy vấn, thực thi và tổng hợp phản hồi.
official