跳到主要内容

GraphQL FAQ

  • 高级特性
    • @defer & @stream
    • @skip & @include
    • 批量查询
    • 使用 SSE 作为 Subscription - 避免 Websocket
    • Fragment Masking
    • Client-side schema - Apollo
    • @client Local only fields - Apollo
    • @export - Apollo
    • Local Resolver - URQL
    • Schema Awareness
    • Local Directive - URQL
      • @_optional
      • @_required
      • 自定义
    • Normalized Caching
    • Document Caching
    • Persisted Queries
    • File Uploads
# 服务端 常用依赖
pnpm add graphql graphql-scalars @graphql-tools/utils @graphql-tools/schema

Apollo vs Relay vs URQL

  • URQL
    • ~15kB
      • 支持离线 - 本地 resolve、本地数据缓存
      • Focus Refetching
      • @urql/exchange-multipart-fetch 支持文件上传
    • 🔶
      • 使用人数少 - 社区小
      • suspense 全局 opt-in
    • 🟡
      • 使用 wonka 做流处理 - 内部异常调试很麻烦
    • 🛑
      • 不能在 cacheExchange 之外操作缓存
      • 不支持本地状态管理
      • 不支持 Batched Queries
  • Relay
    • ~35kB
    • 对 Schema 有要求
      • Schema 规范
      • 支持分页
      • Defer & Stream
      • Live Queries
    • 🛑
      • 不能本地 Resolve
      • 不支持返回部分结果
  • Apollo
    • ~60kB
      • 支持 batch
  • 参考
SymbolDesc
Good at
🔶Not Good Enough
🟡Bad at
🛑Sorry for

Fragment Masking