搞全栈还在纠结 POST、GET、RESTful?试试这个,像调用本地函数一样写接口

停止内耗:我们写的是业务,不是 HTTP 试卷

做开发时,你是否也陷入过这种无效纠结:接口是用 POST 还是 PUT?状态码返 200 还是 201?前端 Axios 封装了一层,后端 Router 又写了一堆。

累不累?我们只是想调个函数存点数据而已。

今天介绍的 js-rpc,旨在让你彻底忘掉 HTTP 协议,回归 JavaScript 函数调用的本质。

1. 服务端:极速启动

拒绝复杂的样板代码,我们先看目录结构,一切约定优于配置。

目录结构

text 复制代码
my-server/
├── api/
│   └── user.js    <-- 对应客户端 rpc.user
├── index.js       <-- 服务入口
└── package.json

启动服务 (index.js)

一行代码即可启动高性能 Node.js 服务,自动扫描 api 目录。

javascript 复制代码
const { create } = require('rpc-server-node');
create(); // 默认监听 3000 端口

编写业务 (api/user.js)

在 api 目录下新建文件,导出的函数即接口。没有 Router,没有 Controller,只有纯粹的业务逻辑。

javascript 复制代码
module.exports = {
  // 登录接口
  async login(username, pwd) {
    if (username !== 'admin') {
      throw new Error('用户不存在');
    }
    // 模拟返回数据
    return { id: 101, token: 'abc-123', name: username };
  },
  
  // 获取详情
  async getProfile(uid) {
    return { uid, role: 'developer' };
  }
};

2. 前端:像调本地方法一样

前端(Web / 小程序 / UniApp)不需要定义 API URL,不需要关心参数在 body 还是 query 里。

调用示例

javascript 复制代码
import { create } from 'rpc-client-fetch';

// 初始化
const rpc = create({ url: 'http://localhost:3000' });

async function main() {
  try {
    // ✨ 魔法时刻:直接调用服务端的函数
    const user = await rpc.user.login('admin', '123456');
    console.log('登录成功', user);
    
  } catch (err) {
    // 自动捕获后端抛出的 Error
    console.error('出错了:', err.message);
  }
}

3. 一套代码,打通全栈

js-rpc 的核心在于全平台兼容。你编写的同一套 api 业务代码,可以无缝运行在:

  • Node.js 服务器 (rpc-server-node)
  • 微信云开发 (rpc-server-tcb)
  • 腾讯云 Serverless (rpc-server-scf)

而在客户端,无论是 Web、小程序、UniApp 还是 Node.js,调用方式完全一致。

这就是真正的全栈:写一次,到处运行。

🔗 开源地址

项目已开源,欢迎 Star ⭐️

从今天起,把 HTTP 协议交给框架,把精力留给改变世界的业务逻辑。

相关推荐
用户4147679304154 小时前
Windows 触摸屏上 Swiper 轮播滑不动?可能是内部滚动容器抢走了你的手势
前端
张明君644515 小时前
从一个 Referer 引发的 403,到 SSR 服务失稳:Astro 流式渲染与缓存失效分析
前端
律宏阔5 小时前
微信小程序 + Taro + TDesign 去掉 [&&&],让普通 Tailwind 类接管局部样式
前端·微信小程序·taro
费曼学习法5 小时前
把 3 个内部服务封装成 MCP Server 的工程复盘:进程模型、超时与错误契约
前端
Captaincc5 小时前
转译:《软件工程师现在该怎么办》
前端·后端·ai编程
天才熊猫君5 小时前
给 Vue 的 reactive 套 Proxy,为什么响应式会失灵?
前端·javascript
htzyl2065 小时前
别急着上微前端:从 6 个场景倒推 Module Federation 2.0 与 qiankun 2.x 的选型
前端·微服务
verohh5 小时前
Cesium 多业务页面切换的资源隔离与架构设计:单 Viewer 复用还是多实例隔离
前端
律宏阔5 小时前
微信小程序 + Taro 从 ESLint 迁移到 Oxlint 让项目代码检查速度提升近 12 倍
前端·typescript·eslint
用户30816998764855 小时前
复制的代码为什么报错?BOM 等 10 种隐形字符 40 组实测
前端