如何在单个iOS项目中为两个不同URL配置两套不同Apollo GraphQL schema
iOS Apollo GraphQL 多schema配置实现方案
单项目多schema支持性说明
完全支持,Apollo iOS及配套CLI原生支持单项目内配置多套独立schema、对应不同请求端点,无需拆分项目。
具体配置步骤
1. 编写Apollo CLI配置文件
在项目根目录新建/修改apollo.config.js,按服务分别配置schema、操作文件路径规则,示例如下:
module.exports = { client: { // 配置多服务 services: { // 第一个服务:用户服务 userService: { schema: "./GraphQL/Schemas/user_schema.graphql", // 对应专属schema文件路径 endpoint: "https://your-domain.com/user/graphql", // 对应请求URL includes: ["./GraphQL/Operations/User/**/*.graphql"] // 该服务的所有graphql操作文件存放路径 }, // 第二个服务:商品服务 goodsService: { schema: "./GraphQL/Schemas/goods_schema.graphql", endpoint: "https://your-domain.com/goods/graphql", includes: ["./GraphQL/Operations/Goods/**/*.graphql"] } } } }
注意:不同服务的操作文件必须分目录存放,避免生成代码时出现schema匹配错误
2. 配置Xcode构建阶段执行脚本
在Xcode的Build Phases中新增Run Script阶段,放在Compile Sources之前,脚本内容示例:
# 进入项目根目录(根据你的项目结构调整路径) cd "${SRCROOT}/YourProjectName" # 分别为每个服务生成API代码,指定不同的输出文件 # 生成用户服务API apollo client:generate \ --serviceName userService \ --output "./GraphQL/Generated/UserAPI.swift" # 生成商品服务API apollo client:generate \ --serviceName goodsService \ --output "./GraphQL/Generated/GoodsAPI.swift"
脚本执行完成后,将生成的两个API Swift文件添加到Xcode项目中即可。
3. 运行时多客户端初始化
为每个服务单独初始化ApolloClient实例,绑定对应端点:
import Apollo // 用户服务客户端 let userApolloClient = ApolloClient( url: URL(string: "https://your-domain.com/user/graphql")! ) // 商品服务客户端 let goodsApolloClient = ApolloClient( url: URL(string: "https://your-domain.com/goods/graphql")! )
发起请求时,使用对应服务的客户端调用生成的对应API即可,示例:
// 调用用户服务接口 userApolloClient.fetch(query: UserInfoQuery()) { result in // 处理返回结果 } // 调用商品服务接口 goodsApolloClient.fetch(query: GoodsListQuery()) { result in // 处理返回结果 }
常见注意事项
- 不同服务的schema不要重名,操作文件不要跨目录存放
- 若使用Apollo iOS 1.x以上版本,CLI的generate命令参数略有调整,按对应版本参数规则调整即可
- 生成代码时不要重复输出到同一个文件,避免覆盖
内容的提问来源于stack exchange,提问作者AVR
相关产品推荐
相关产品推荐

