<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>OpenAPI | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>《Orval：从OpenAPI规范自动生成类型安全客户端代码》</title><link>https://channel.meo-ai.com/posts/635</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/635</guid><pubDate>Sun, 17 May 2026 10:15:08 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Orval：从OpenAPI规范自动生成类型安全客户端代码》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%85%A8%E6%A0%88&quot; title=&quot;#全栈&quot;&gt;#全栈&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23OpenAPI&quot; title=&quot;#OpenAPI&quot;&gt;#OpenAPI&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CodeGeneration&quot; title=&quot;#CodeGeneration&quot;&gt;#CodeGeneration&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ReactQuery&quot; title=&quot;#ReactQuery&quot;&gt;#ReactQuery&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Swagger&quot; title=&quot;#Swagger&quot;&gt;#Swagger&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23APIClient&quot; title=&quot;#APIClient&quot;&gt;#APIClient&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;Orval 是一个代码生成工具，能读取 &lt;mark class=&quot;highlight&quot;&gt;OpenAPI&lt;/mark&gt; v3 或 Swagger v2 规范（支持 yaml 和 json 格式），自动生成带完整 TypeScript 类型签名的客户端代码。它支持 React Query、SWR、Vue Query、Svelte Query、Solid Query、Angular、Hono、Zod、原生 fetch 和 MCP 等多种框架与库，同时还能生成模型、请求函数、Hooks 和 Mock 数据。项目提供在线 Playground 快速体验，开发时使用 Bun 构建，社区活跃且有赞助支持。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. Orval 的核心能力是从 &lt;mark class=&quot;highlight&quot;&gt;OpenAPI&lt;/mark&gt; / Swagger 文档一键生成类型安全的 TS 客户端，告别手写接口代码的繁琐工作&lt;br /&gt;2. 生态支持非常全面，覆盖了 React、Vue、Svelte、Solid、Angular 等主流前端框架，还有 React Query、SWR 等数据获取方案&lt;br /&gt;3. 不只是生成请求函数，还能顺带产出数据模型（Models）、React Hooks、以及用于测试的 Mock 数据，一条龙服务&lt;br /&gt;4. 项目内置了在线 Playground，不用安装就能上手体验，对新手和想快速验证的同学很友好&lt;br /&gt;5. 开发侧使用 Bun 作为包管理工具，测试流程完善，包含单元测试、快照测试和 CLI 验证&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://github.com/orval-labs/orval&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://github.com/orval-labs/orval&quot;&gt;https://github.com/orval-labs/orval&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://github.com/orval-labs/orval&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;orval is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats. 🍺 - orval-labs/orval&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;GitHub&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;GitHub - orval-labs/orval: orval is able to generate client with appropriate type-signatures (TypeScript) from any valid &lt;mark class=&quot;highlight&quot;&gt;OpenAPI&lt;/mark&gt;…&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;orval is able to generate client with appropriate type-signatures (TypeScript) from any valid &lt;mark class=&quot;highlight&quot;&gt;OpenAPI&lt;/mark&gt; v3 or Swagger v2 specification, either in yaml or json formats. &lt;i class=&quot;emoji&quot; style=&quot;background-image:url(&apos;//telegram.org/img/emoji/40/F09F8DBA.png&apos;)&quot;&gt;&lt;b&gt;🍺&lt;/b&gt;&lt;/i&gt; - orval-labs/orval&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《人生苦短，何必手写 API 类型：OpenAPI 驱动的 React 开发》</title><link>https://channel.meo-ai.com/posts/569</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/569</guid><pubDate>Mon, 02 Mar 2026 02:28:02 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《人生苦短，何必手写 API 类型：&lt;/span&gt;&lt;mark class=&quot;highlight&quot;&gt;&lt;span class=&quot;post-title-source&quot;&gt;OpenAPI&lt;/span&gt;&lt;/mark&gt;&lt;span class=&quot;post-title-source&quot;&gt; 驱动的 React 开发》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23OpenAPI&quot; title=&quot;#OpenAPI&quot;&gt;#OpenAPI&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TypeScript&quot; title=&quot;#TypeScript&quot;&gt;#TypeScript&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Hey_API&quot; title=&quot;#Hey_API&quot;&gt;#Hey_API&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23MSW&quot; title=&quot;#MSW&quot;&gt;#MSW&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Nanoquery&quot; title=&quot;#Nanoquery&quot;&gt;#Nanoquery&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Contract_First&quot; title=&quot;#Contract_First&quot;&gt;#Contract_First&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结&lt;br /&gt;&lt;br /&gt;本文是 Evil Martians 团队&quot;契约优先&quot;系列第三篇，介绍如何通过 &lt;mark class=&quot;highlight&quot;&gt;OpenAPI&lt;/mark&gt; 规范驱动 React 前端开发。核心思路是将 &lt;mark class=&quot;highlight&quot;&gt;OpenAPI&lt;/mark&gt; Spec 作为单一事实来源，利用 Hey API 自动生成 TypeScript 类型、SDK 客户端和 Zod 验证模式，配合 Nanostores 与 Nanoquery 实现类型安全的状态管理，并使用 MSW 在浏览器层面拦截网络请求进行模拟，实现前后端并行开发。当后端契约变更时，重新生成代码即可让 TypeScript 立即暴露所有需要更新的地方，避免生产环境出现类型不匹配错误。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;- **手写 API 类型的痛点**：类型与后端脱节、缺乏运行时验证、重复样板代码、错误只能在生产环境发现&lt;br /&gt;- **Hey API 自动生成**：通过 &lt;code&gt;&lt;mark class=&quot;highlight&quot;&gt;openapi&lt;/mark&gt;-ts&lt;/code&gt; 从 &lt;mark class=&quot;highlight&quot;&gt;OpenAPI&lt;/mark&gt; Spec 生成 TypeScript 类型、SDK 函数、Zod 验证模式和客户端配置，实现编译时与运行时双重安全&lt;br /&gt;- **Nanostores + Nanoquery 状态管理**：将 API 数据视为全局状态存储在组件外，支持缓存、自动重取、跨组件共享，避免传统 Hooks 的数据获取陷阱&lt;br /&gt;- **MSW 网络层模拟**：在浏览器层面拦截真实 HTTP 请求返回模拟数据，支持随机延迟、分页、过滤、错误场景，实现不依赖后端的功能开发&lt;br /&gt;- **完整实战示例**：包含酒店管理系统代码，展示表单验证、CRUD 操作、路由集成、环境配置切换等完整开发流程&lt;br /&gt;- **契约优先工作流**：后端更新 Spec → 前端重新生成 → TypeScript 报错定位 → 修复代码，确保集成一次成功&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://evilmartians.com/chronicles/lifes-too-short-to-hand-write-api-types-openapi-driven-react&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://evilmartians.com/chronicles/lifes-too-short-to-hand-write-api-types-openapi-driven-react&quot;&gt;https://evilmartians.com/chronicles/lifes-too-short-to-hand-write-api-types-openapi-driven-react&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://evilmartians.com/chronicles/lifes-too-short-to-hand-write-api-types-openapi-driven-react&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Transform your React development with contract-first APIs. Generate TypeScript types, build type-safe clients, and develop with mocks while backend implements—no more waiting, no more integration chaos.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;evilmartians.com&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Life&apos;s too short to hand-write API types: OpenAPI-driven React—Martian Chronicles, Evil Martians’ team blog&quot; src=&quot;/static/https://cdn4.telesco.pe/file/fFx49yUeDXr1tceP7qxaoV31dlNscRSoE9WwXNp7qwXZl82yRqOwikqCKNaCAEUrGiJYTGcQWP1VsMIEkEPnU5MDpv0c0FfuaUrRkWLrjvFkAfz7yEfmNRDqyhv2z-3SNmDCam-EQ5EpRlFVOBcwCOhPcRC5aKOm8VeNuTrtoASQ_ou8Txo40rzs66MZyEcFSUPJ42uE7D_8_IX6FWsit7zGNzwUQxY1OQELkejPJC1Narwd_XR3p8FROvGDSbkhCpaTFOUDTgojjwfyKJi1XqQK9dXbljZjSMXI9oMECh5Zj6M5xLrzfX9FvDrFwdmOmgUXuXGAx6yX6mOHUPNDzg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Life&apos;s too short to hand-write API types: &lt;mark class=&quot;highlight&quot;&gt;OpenAPI&lt;/mark&gt;-driven React—Martian Chronicles, Evil Martians’ team blog&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Transform your React development with contract-first APIs. Generate TypeScript types, build type-safe clients, and develop with mocks while backend implements—no more waiting, no more integration chaos.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>