博客 / 詳情

返回

搞全棧還在糾結 POST、GET、RESTful?試試這個,像調用本地函數一樣寫接口

停止內耗:我們寫的是業務,不是 HTTP 試卷

做開發時,你是否也陷入過這種無效糾結:接口是用 POST 還是 PUT?狀態碼返 200 還是 201?前端 Axios 封裝了一層,後端 Router 又寫了一堆。

累不累?我們只是想調個函數存點數據而已。

今天介紹的 js-rpc,旨在讓你徹底忘掉 HTTP 協議,迴歸 JavaScript 函數調用的本質。

1. 服務端:極速啓動

拒絕複雜的樣板代碼,我們先看目錄結構,一切約定優於配置。

目錄結構

my-server/
├── api/
│   └── user.js    <-- 對應客户端 rpc.user
├── index.js       <-- 服務入口
└── package.json

啓動服務 (index.js)

一行代碼即可啓動高性能 Node.js 服務,自動掃描 api 目錄。

const { create } = require('rpc-server-node');
create(); // 默認監聽 3000 端口

編寫業務 (api/user.js)

在 api 目錄下新建文件,導出的函數即接口。沒有 Router,沒有 Controller,只有純粹的業務邏輯。

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 裏。

調用示例

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 ⭐️

  • GitHub: https://github.com/myliweihao/js-rpc
  • 客户端: npm i rpc-client-fetch
  • 服務端: npm i rpc-server-node

從今天起,把 HTTP 協議交給框架,把精力留給改變世界的業務邏輯。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.