Schema-First 还是 Code-First

简介: Schema-First 还是 Code-First


什么是 Schema-First

优先设计 Schema,又称 SDL-First (Schema Definition Language)。

优势

  • 大多数情况下,该方式能够产生设计良好的API
  • 遵循依赖倒置原则(DIP),更加抽象,更少的依赖项
  • 减少开发时间,允许前端和后端开发团队同时进行开发(因为 Schema 数据可以更容易地模拟,示例 Mock: https://github.com/graphql-editor/graphql-editor


劣势

  • Schema 与 解析器(Resolver)必须同步更新、完全匹配,否则可能会导致严重的问题
  • SDL 定义重用性不佳(不包含解析器),可能会导致代码的冗余
  • 难以将分布式架构合并成单个(需要借助第三方工具,如graphql-editorgraphql-tools等)


什么是 Code-First

不是先写代码后设计!!!

又可以叫做(Resolver-First),优先写好解析器代码,然后生成 Schema(脚本创建,而不是手动创建)。


优势

  • 同时涵盖了 Schema 的定义以及解析器(Resolvers),可以作为单一的事实来源
  • 代码优先的方式可以无需使用大量的工具,轻松克服 Schema 优先中出现的困难
  • 如果期望 Schema 在复杂度或大小上不断增加,代码优先的方式更易于管理


劣势

  • 定义和解释器在一起降低了代码的可读性
  • API 设计更容易被实现影响,而不是业务需求
  • 向后不兼容的更改更容易发生

进化


当 GraphQL 在 2015 年发布时,很生态圈尚未形成。那个时代,我们只能通过官方的定义和graphql-js(官方的 JavaScript 实现)来创建 GraphQL 项目。

到了 2016 年,graphql-tools项目发布了,并且首次推广 Schema 优先的方式,分离出了两个层面来:

  • Schema 定义(Definition):使用 SDL(Schema Definition Language) 编写 GraphQL Schema定义
  • Schema 实现(Implementation):编写所需的解释器(Resolvers)代码


在这之后,很长一段时间里 Schema-First 成为了 GraphQL 项目默认方案。由于该方式的局限性,人们开始寻找一些新的解决方案,第一个 Code-First 的框架应运而生。

后来, Code-First 方案流行了起来,以至于现在几乎每一个框架都有其 Code-First 方案,甚至只关注 Code-First 解决途径。


框架推荐

相关文章
|
JSON 前端开发 数据可视化
AMIS【部署 01】amis前端低代码框架可视化编辑器amis-editor本地部署流程
AMIS【部署 01】amis前端低代码框架可视化编辑器amis-editor本地部署流程
3795 0
|
人工智能 JavaScript Serverless
从零开始开发 MCP Server
文章介绍了如何利用Serverless Devs CLI工具从零开发并一键部署MCP Server至阿里云函数计算(FC)。涵盖MCP协议背景、Serverless Devs工具简介、本地初始化与开发MCP Server步骤、通过SSE协议部署及测试MCP Server方法,以及三种客户端接入方式。读者可快速上手构建支持LLM扩展交互能力的智能体服务,并使用内置LLM的Inspector进行调试。文末还提供了更多资源和交流渠道。
2795 63
从零开始开发 MCP Server
|
11月前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
1243 2
|
机器学习/深度学习 数据采集 人工智能
WebDancer:从零训练一个 DeepResearch 类智能体
WebDancer 是一款具备 Agentic 能力的智能体,能在开放网页环境中自主提问、搜索、推理并验证答案。它通过多步推理、信息整合与交叉验证解决复杂问题,如医学文献分析或政策追踪。WebDancer 采用 CRAWLQA 和 E2HQA 数据合成策略生成高质量训练数据,并结合 SFT(监督微调)+ RL(强化学习)双阶段训练方法,提升模型在动态环境中的适应性和泛化能力。其核心技术包括 ReAct 行为框架和 DAPO 强化学习算法,确保路径优化与策略稳定性。未来,WebDancer 将接入 Browser 工具链,拓展至代码沙盒、长文本写作等应用场景,进一步向通用智能体演进。
1840 27
|
前端开发 搜索推荐 NoSQL
错过就亏大了!这款开源 IM 项目,功能强大、部署简单,适合私有化部署,开发者必收藏!
Lumen IM 是一个基于 Vue3 + Naive UI 前端与 Go 后端的开源即时通讯系统,支持私聊、群聊、文件传输、消息撤回等功能,适用于企业内部沟通及开发者学习。项目采用 WebSocket 实现即时消息推送,技术栈包括 MySQL、Redis 和 Minio 等,确保高效稳定运行。界面简约美观,操作便捷,并支持笔记功能和个性化设置。无论是企业使用还是二次开发,Lumen IM 都是一个优质选择
1226 0
|
存储 弹性计算 固态存储
阿里云服务器价格表(2023新版报价)
阿里云服务器1核1G1M优惠价17.49元3个月,251.86元一年、2核4G1M带宽40.98元3个月,590.11元一年、4核8G服务器73.38元3个月,1056.67元一年、8核16G配置138.18元3个月,1989.79元一年、8核32G服务器1M带宽214.50元3个月,3088.80元一年
12956 1
阿里云服务器价格表(2023新版报价)
|
人工智能 IDE JavaScript
分享一个很好用的代码辅助AI工具CodeGeeX2
分享一个很好用的代码辅助AI工具CodeGeeX2
857 1
|
Web App开发 JavaScript 前端开发
如何在浏览器中安装使用Vue开发者工具?Vue开发者工具的安装使用?可直接提取插件安装使用
这篇文章介绍了如何在浏览器中安装和使用Vue开发者工具,提供了两种下载方式,包括直接下载编译好的插件和从GitHub上下载源代码后进行打包。文章还详细说明了在Chrome浏览器中加载插件的步骤,以及插件在Vue项目和非Vue项目中的不同表现。
如何在浏览器中安装使用Vue开发者工具?Vue开发者工具的安装使用?可直接提取插件安装使用
|
JSON 资源调度 JavaScript
如何在 Node.js 项目中使用 Prettier 进行代码格式化
如何在 Node.js 项目中使用 Prettier 进行代码格式化
954 0
如何在 Node.js 项目中使用 Prettier 进行代码格式化
|
弹性计算 运维 算法
ECS稳定性体系建设与最佳实践|开发者分享会
今天分享的内容来自阿里云弹性计算技术专家杜文彬的“ECS稳定性体系建设与最佳实践”。全文围绕阿里云ECS稳定性体系建设、云上应用稳定性最佳实践这2个主题内容进行讲解。