Norish开发入门:从API接口到插件开发的完整技术文档
Norish开发入门从API接口到插件开发的完整技术文档【免费下载链接】norishNorish - A realtime, self-hosted recipe app for families friends项目地址: https://gitcode.com/gh_mirrors/no/norishNorish是一款实时的、自托管的家庭和朋友食谱应用本指南将帮助开发者从API接口使用到插件开发快速掌握Norish的技术架构和扩展方式。通过本文你将了解如何搭建开发环境、利用API接口进行数据交互以及开发自定义插件来扩展Norish的功能。开发环境搭建环境要求Node.js22.22.0见.nvmrcpnpm10.x或更高版本Docker用于PostgreSQL、Redis和无头ChromeGit本地开发设置# 克隆仓库 git clone https://gitcode.com/gh_mirrors/no/norish cd norish # 安装依赖 pnpm install # 创建环境文件 cp .env.example .env.local # 启动所需服务Postgres、Redis、Chrome pnpm run docker:up # 运行Web应用 pnpm run dev # 运行移动应用Expo pnpm run dev:mobile至少需要在.env.local中配置DATABASE_URL、REDIS_URL、AUTH_URL和MASTER_KEY使用openssl rand -base64 32生成。详细配置可参考Server runtime和Database。API接口详解Norish在/api/v1路径下提供HTTP API接口方便开发者进行数据交互和扩展。认证方式通过以下任一方式传递API密钥x-api-key: your-api-keyAuthorization: Bearer your-api-key注意/api/docs和/api/openapi.json需要已登录的Web会话GET /api/v1/health是公开的健康检查接口其他所有/api/v1端点都需要API凭证。主要端点健康检查GET /api/v1/health- 公共健康检查接口返回API和内部解析器服务的健康状态。食谱管理GET /api/v1/recipes/{id}- 获取指定ID的食谱详情POST /api/v1/recipes/search- 列出食谱支持可选过滤条件POST /api/v1/recipes/import/url- 从URL导入食谱POST /api/v1/recipes/import/paste- 粘贴导入食谱POST /api/v1/recipes/search返回分页的食谱列表可选过滤条件包括search、searchFields、tags、categories、filterMode、sortMode、minRating和maxCookingTime。cursor默认为0limit默认为50。食材管理GET /api/v1/groceries- 获取食材列表POST /api/v1/groceries- 添加新食材PATCH /api/v1/groceries/{id}/done- 标记食材为已购买PATCH /api/v1/groceries/{id}/undone- 标记食材为未购买PATCH /api/v1/groceries/{id}/store- 更新食材的存储位置DELETE /api/v1/groceries/{id}- 删除食材针对单个食材的修改端点需要version字段以实现乐观并发控制。PATCH /api/v1/groceries/{id}/store在请求体中接受storeId和可选的savePreference。商店管理GET /api/v1/stores- 获取商店列表POST /api/v1/stores- 添加新商店计划食谱GET /api/v1/planned-recipes/today- 获取今日计划食谱GET /api/v1/planned-recipes/week- 获取本周计划食谱GET /api/v1/planned-recipes/month- 获取本月计划食谱POST /api/v1/planned-recipes- 添加计划食谱DELETE /api/v1/planned-recipes/{itemId}- 删除计划食谱计划食谱范围端点使用服务器时区来确定今天/周/月的边界周范围是从周一到周日。插件开发指南虽然Norish目前没有专门的插件系统但可以通过以下方式扩展功能共享模块开发Norish采用模块化架构通过创建共享模块可以实现功能扩展。主要共享模块位于packages/shared-react/src/hooks/和packages/shared-react/src/contexts/目录下。例如创建一个新的共享钩子模块在packages/shared-react/src/hooks/目录下创建新的钩子文件实现钩子逻辑确保不导入特定平台的模块在packages/shared-react/src/index.ts中导出新钩子集成第三方服务可以通过API接口集成第三方服务例如集成AI食材识别服务添加新的食谱导入来源连接外部日历服务集成方式通常是创建新的API端点或使用现有端点的扩展参数具体实现可参考packages/api/src/parser/目录下的解析器模块。自定义主题和样式Norish使用Tailwind CSS进行样式管理可以通过以下方式自定义主题修改tooling/tailwind/heroui-theme.css文件扩展tooling/tailwind/heroui-theme.js中的主题配置在应用中使用自定义CSS类高级开发技巧测试策略Norish使用Vitest进行测试测试文件通常与被测试模块放在同一目录下命名为*.test.ts或*.test.tsx。可以使用以下命令运行测试pnpm run test代码质量工具项目使用ESLint和Prettier进行代码质量控制相关配置位于tooling/eslint/和tooling/prettier/目录下。提交代码前建议运行pnpm run lint pnpm run format性能优化使用React.memo和useMemo优化组件渲染合理使用TanStack Query进行数据缓存优化图片加载使用适当的尺寸和格式总结Norish提供了强大的API接口和模块化架构使开发者能够轻松扩展其功能。通过本文介绍的开发环境搭建、API接口使用和插件开发方法你可以开始构建自定义功能和集成第三方服务。如需更多帮助请参考项目中的开发命令文档和贡献指南。祝你的Norish开发之旅顺利 【免费下载链接】norishNorish - A realtime, self-hosted recipe app for families friends项目地址: https://gitcode.com/gh_mirrors/no/norish创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Windows 11任务栏拖放功能深度解析:轻量级开源解决方案完整指南

Windows 11任务栏拖放功能深度解析:轻量级开源解决方案完整指南

Windows 11任务栏拖放功能深度解析:轻量级开源解决方案完整指南 【免费下载链接】Windows11DragAndDropToTaskbarFix "Windows 11 Drag & Drop to the Taskbar (Fix)" fixes the missing "Drag & Drop to the Taskbar" support in Wind…

2026/9/29 19:13:11 阅读更多 →
10个Chunky渲染技巧:提升Minecraft截图真实感的实用方法

10个Chunky渲染技巧:提升Minecraft截图真实感的实用方法

10个Chunky渲染技巧:提升Minecraft截图真实感的实用方法 【免费下载链接】chunky A path tracer to create realistic images of your Minecraft worlds. 项目地址: https://gitcode.com/gh_mirrors/ch/chunky Chunky是一款强大的路径追踪工具,专…

2026/9/25 23:53:20 阅读更多 →
计算机毕业设计之基于springboot的高校学生管理系统

计算机毕业设计之基于springboot的高校学生管理系统

本论文借助 Java 编程语言,运用VUE 前端架构及SpringBoot 后端架构,以 MySQL 数据库为依托,对一套高校学生管理系统进行了分析和设计。此系统包括课程信息、选课信息等功能,并划分为学生、教师和管理员三个角色,各角色…

2026/9/23 19:11:45 阅读更多 →

最新新闻

安装谷歌浏览器

安装谷歌浏览器

安装谷歌浏览器 在众多电脑软件中浏览器应该是每台电脑的必备软件,如何选择浏览器,选择哪一款浏览器对于好多电脑小白来说可能不是那么在意,但事实上有一款合适的浏览器是相当重要的。 曾经我看过一个人的电脑,着实让我有些发疯&a…

2026/10/11 4:00:55 阅读更多 →
Golang 中数组和切片的区别?

Golang 中数组和切片的区别?

在 Go 语言的开发与技术面试中,“数组(Array)和切片(Slice)的区别”是一个被提及频率极高的高频问题。许多刚从 C/C、Java 或 Python 转到 Go 的开发者往往会产生认知偏差:C/C 开发者习惯了将“数组名作为指…

2026/10/11 4:00:55 阅读更多 →
STM32CubeMx开发之路—10使用IIC读写24C02

STM32CubeMx开发之路—10使用IIC读写24C02

STM32CubeMx开发之路—10使用IIC读写24C02 附件 源码仓库: 码云仓库 运行环境 Windows10STM32CubeMX Version 5.2.0Keil5(MDK5) Version 5.28.0.0 简介 本例程主要讲解如何使用硬件IIC读写24C02 STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第…

2026/10/11 4:00:55 阅读更多 →
为什么连接器太多会挤占上下文窗口

为什么连接器太多会挤占上下文窗口

摘要本文围绕智能创作助手在信息检索与内容生成中的应用展开,重点探讨如何基于用户意图和搜索词,通过网络检索整合有效信息,生成结构清晰、逻辑严谨且具备实用价值的文本。内容涵盖从关键词提取到多源信息融合的全流程处理机制,强…

2026/10/11 4:00:55 阅读更多 →
STM32CubeMx开发之路—12使用ADC和DAC

STM32CubeMx开发之路—12使用ADC和DAC

STM32CubeMx开发之路 — 使用ADC和DAC 运行环境 Windows10STM32CubeMX Version 5.2.0Keil5(MDK5) Version 5.28.0.0芯片 STM32F103ZE 简介 本例程主要讲解如何使用ADC和DAC STM32CubeMx基本配置 基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第一个项目 CubeMX配置 …

2026/10/11 4:00:55 阅读更多 →
RT-Thread—STM32—EasyFlash

RT-Thread—STM32—EasyFlash

RT-Thread—STM32—EasyFlash 概述 本教程主要根据官方推荐的教程进行改编,详细信息请参考EasyFlash软件包 本例程的模板使用通用模板环境搭建里面的模板 RT-Thread——STM32——FAL库 示例工程请参见文末的源码仓库链接, 建议从头开始移植, 加深印象。 配置 打开工…

2026/10/11 3:59:54 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →