GraphQL Awesome
- WebUI
- graphql/graphiql
graphql/graphql-playground- graphql-kit/graphql-voyager
- interactive graph
- graphql-editor/graphql-editor
- Visual Editor & GraphQL IDE.
- Codegen
- dotansimha/graphql-code-generator
- 基于 GraphQL 生成各种客户端服务端代码
- 对 TypeScript 支持非常好
- anvilco/spectaql
- 文档生成
- glideapps/quicktype
- types and converters from JSON, Schema, and GraphQL
- graphql-editor/graphql-zeus
- dotansimha/graphql-code-generator
- jensneuse/graphql-go-tools
- 实现了 federation
- 可用于实现 graphql 服务应用
- B2o5T/graphql-eslint
- GraphQL 语法检查
学习
决策
- Code first or GraphQL Schema first
- Code - Code to Schema
- 可读性好,但是需要手动维护,可以复用现有代码
- Schema - Schema to Code
- 生成很多代码,可读性交较差,但是可以快速搭建原型
- Code - Code to Schema
- 动态Schema vs 静态Schema
- 动态
- 可以根据租户自定义 - 类似动态 CMS
- 可以根据角色自定义 - conditional schema
- 静态
- 可以手写
- 可以一次性生成
- 动态
- DB Schema first or Entity first
- DB Schema
- 更好的掌控数据库结构
- 更好的利用数据库特性
- Entity
- 可能考虑支持多数据库
- DB Schema
- Prototype 阶段 还是 Production 阶段
- Prototype
- DB -> GraphQL - 只是做简单的接口封装
- Production
- 要求 DB 设计合理
- DB Schema first
- 预留扩展
- Prototype
- 是否需要 类型安全
- 影响怎么做 schema builder
- 什么程度的 类型安全
- 全局
- 输入输出校验
- 一定程度增加 维护
- 一定程度增加 写代码 的难度
- 是否需要 subscriptions
- 要求感知 修改
- 是否需要 federation/gateway
- 是否需要 dataloader
- 是否需要 relay
- Node, Connection, clientMutationId
设计
- GraphQL 最佳实践
- 通过 HTTP 提供服务
- JSON+Gzip 返回
- 对接口进行版本控制 - 利用 deprecated 和 额外字段能
- 字段默认 null - 利用 非 null 设计更好的接口
- 分页使用 Connection - 通过 first, last, before, after 实现基于 cursor 分页
- 服务端批处理和缓存 - 避免 N+1 问题 - 利用 graphql/dataloader 处理
- Principled GraphQL
- One Graph
- Federated Implementation
- Track the Schema in a Registry
- Abstract, Demand-Oriented Schema
- Use an Agile Approach to Schema Development
- Iteratively Improve Performance
- Use Graph Metadata to Empower Developers
- Access and Demand Control
- Structured Logging
- Separate the GraphQL Layer from the Service Layer
- Gitlab GraphQL API 规范文档
Gateway
- apollo gateway
- 配合 Apollo Studio 体验会很好 - 但是一般不会使用 Apollo Studio
- federation 功能强
- 但推荐使用预先生成的 schema
- 逻辑相对复杂
- movio/bramble
- Golang
- 比 apollo 简单但功能更弱
- 基于 service 合成 - 支持部分简单 directive
- 不支持 subscriptions
- Introducing Bramble: A Federated GraphQL Gateway Implemented In Go
- nautilus/gateway
- MIT, Golang
- Introspect schema,自动合并 - 不需要 directive
- 不支持 subscriptions
- A Guide to GraphQL Schema Federation, Part 1
Library
- Golang
- graphql-go/graphql
- 类似 graphql-js 接口
- 99designs/gqlgen
- Golang, GraphQL Schema 生成 Resolver
- graph-gophers/graphql-go
- 基于反射自动绑定
- graph-gophers/dataloader
- Khan/genqlient
- type-safe Go GraphQL client
- graphql-go/graphql
- Typescript
- SQL/GraphQL
- supabase/pg_graphql
- dosco/graphjin
- GraphQL to SQL compiler
- Java/JVM/Kotlin
- Netflix/dgs-framework
- Spring Boot
- graphql-java/graphql-java
- MIT, Java
- graphql-java-kickstart/graphql-spring-boot
- MIT, Java
- spring-projects/spring-graphql
- Apache-2.0, Java
- babyfish-ct/jimmer
- ORM with GraphQL
- ExpediaGroup/graphql-kotlin
- Apache-2.0, Kotlin
- smallrye/smallrye-graphql
- Implementation for MicroProfile GraphQL
- quarkus & smallrye
- Netflix/dgs-framework
- Schema
- ardatan/graphql-tools
- @graphql-tools/schema
- sikanhe/gqtx
- graphql-modules
- graphql
- GraphQLSchema
- ardatan/graphql-tools
- Schema/TypeScript Code First
- MichalLytek/type-graphql
- MIT, Typescript
- 注解/修饰器 方式
- hayes/pothos
- ISC, Typescript
- @pothos/core
- 强类型,类似 zod 方式构建 schema
- infer 推导类型
- ⚠️ 写起来有些繁琐
- graphql-nexus/nexus
- MIT, Typescript
- nexus
- ⚠️ 开发不活跃
- 通过代码生成,确保类型
- MichalLytek/type-graphql
- IvanGoncharov/graphql-faker
- mock graphql
Server
Server, Federation, Gateway, Adapter
- NodeJS
- graphql-yoga
- 👍 适合各种场景,支持不同的 schema 构建方式
- 简单轻量
- [apollographql/apollo-server]
- graphile/postgraphile
- PostgreSQL -> GraphQL
- zalando-incubator/graphql-jit
- 优化 graphql 执行
- graphql-yoga
- Golang
- movio/bramble
- 受 nautilus 启发
- nautilus/gateway
- 开发不活跃
- urigo/graphql-mesh
- GraphQL Adapter
- 后端支持 GraphQL, JSON Schema, gRPC, Swagger, OpenAPI, SOAP, Postgres, Mongo, OData, Thrift, SQLite, MySQL, Neo4j
- REST,DB,RPC 映射为 GraphQL
- 收集 API 接口规范、生成 SDK、生成 GraphQL Schema、生成接口映射
- movio/bramble
- google/rejoiner
- Generates a unified GraphQL schema from gRPC microservices and other Protobuf sources
- ent/ent
- Apollo Federation specification
- hasura/graphql-engine
- dosco/graphjin
- Apache-2.0, Go
- parse-community/parse-server
- dgraph-io/dgraph
- directus/directus
- reactioncommerce/reaction
- spree/spree
- redwoodjs/redwood
- VulcanJS/Vulcan
- api-platform/api-platform
- semi-technologies/weaviate
- daptin/daptin
- Backend As A Service
- dosco/graphjin
- keystonejs/keystone
DevTools
Client
- graphql
- 164 kB, 41.9 kB
- @apollo/client
- 204kB,60kB
- 支持 batch - apollo-link-batch-http
- urql
- @urql/core+wonka
- 40kB,15kB
- graphql-request
- 58kB,16kB
- fetch + gql
- react-query+graphql-request
- subscription
- fetch
- GraphQL Yoga 支持
- graphql-sse
- enisdenjo/graphql-ws
- PROTOCOL
- 99designs/gqlgen#1430 不支持 graph-transport-ws
- apollographql/subscriptions-transport-ws
- ⚠️ 不活跃,没怎么维护
- 推荐 graphql-ws
- 参考
- urql Subscriptions
- fetch
Public GraphQL
GitLab
- GraphQL Explorer
- 文档
- GraphQL API 规范文档
- 全局 ID 格式
gid://gitlab/MyObject/123
- 前端 GraphQL 开发文档
# 生成 schema
bundle exec rake gitlab:graphql:schema:dump
Github
参考
- chentsulin/awesome-graphql
- APIs-guru/graphql-apis
- 公共 GraphQL API 列表