Scala GraphQL 服务实战:Caliban、Schema 设计与订阅
以 Caliban 为主线,系统讲解 Scala 侧 GraphQL 服务的落地路径。覆盖 Schema 定义与 case class 派生、接口与联合类型、Relay 分页、ZQuery 批处理消除 N+1、变更与事务边界、基于 ZStream 的订阅推送,以及鉴权指令、查询复杂度限制、Apollo Federation 与 schema 演进等生产议题,并给出可直接复用的代码片段与踩坑清单。
tag
以 Caliban 为主线,系统讲解 Scala 侧 GraphQL 服务的落地路径。覆盖 Schema 定义与 case class 派生、接口与联合类型、Relay 分页、ZQuery 批处理消除 N+1、变更与事务边界、基于 ZStream 的订阅推送,以及鉴权指令、查询复杂度限制、Apollo Federation 与 schema 演进等生产议题,并给出可直接复用的代码片段与踩坑清单。
系统梳理 HTTP 状态码与请求语义:1xx~5xx 五位分层与责任归属、2xx 成功语义细分(200/201/202/204/206)、3xx 重定向与缓存协商(301/302/303/307/308/304)、4xx 客户端错误(401 与 403、405/409/422/429)、5xx 服务端错误(500/502/503/504)、幂等性与安全性与方法与状态码搭配、缓存相关头与条件请求、常见误用与排错套路、API 设计中的状态码取舍与 RFC 7807 问题详情。
系统讲解 API 版本化策略与兼容性工程,对比 URL 路径、Header 与内容协商三种版本方案,深入语义化版本、字段演进矩阵、废弃与下线全生命周期管理
系统覆盖 TypeScript 库(npm 包)开发与发布:tsconfig 构建配置、声明文件生成、API 设计(泛型/重载/模块暴露)、包导出入口(exports/main/types)、兼容性与 semver 演进、sideEffects 与 tree-shaking、发布流程、声明文件测试,以及开源库的工程实践。
围绕借阅服务的列表接口,讲清 Pageable 与 Page/Slice 的取舍、count 查询的真实代价、偏移分页的深分页问题与 keyset 分页的写法、过滤参数的表达方式、排序字段白名单如何同时防注入与防全表扫描,以及分页元信息的响应信封该怎么定。
把「图书借阅管理服务」的动作式接口重写成资源式接口:讲清资源命名的判据、URL 层级与扁平化的取舍、HTTP 方法与状态码的语义,以及批量操作、自定义动作和统一错误响应该在什么条件下破例,并给出可直接复用的 Controller 与 ProblemDetail 代码。
本节把「图书管理服务」从随手写的接口改造成符合 REST 约定的一整套 API:资源如何命名、HTTP 方法与状态码怎样搭配、为什么幂等性决定重试策略、分页过滤排序如何与 Spring Data 的 Pageable 对齐、统一响应包装体值不值得用,以及 API 版本化的三种方式与 4.x 内建支持。
GraphQL 彻底改变了 API 设计范式。本文从 GraphQL vs REST 深度对比出发,详解 Apollo Server 配置、TypeGraphQL 装饰器与依赖注入、DataLoader N+1 优化、认证授权、联邦架构与性能调优的完整实战方案。