Feathers是一个轻量级的REST和实时的API层,可以在Node.js、React Native及浏览器中使用。其核心是一组工具和架构模式,可以轻松创建可扩展的REST API和实时应用程序。使用Feathers,你可以在几分钟内构建原型,并在几天内生产就绪的应用程序。
Feathers通过在一些经过实战考验的开源技术之间的粘合代码实现了这一点 - 增加了一些最小的抽象,并引入了比传统MVC架构更容易理解,维护和扩展的应用程序架构。
1. 快速创建你的第一个实时应用程序
依次输入以下命令,创建并启动一个Feathers应用:
$ npm install -g @feathersjs/cli $ mkdir my-app $ cd my-app $ feathers generate app $ npm start
在以上操作中,我局安装了Feathers的命令行工具@feathersjs/cli
,这会生成一个feathers
命令,可以通过feathers --help
或feathers -h
来查看feathers
命令行说明。之后创建了一个my-app
目录,并在该目录中使用feathers generate app
命令来创建了一个新的Feathers应用。在创建应用时,需要我们录入一些应用相关信息,然后生成命令会自动安装依赖包。完成应用创建后,使用npm start
启动应用。
查看文档(官方文档)以了解有关Feathers的更多信息,或在Slack小组中打个招呼,或在Twitter上给个关注。
feathers
命令行说明
$ feathers --help 用法: feathers generate [type] 选项: -V, --version 输出版本号 -h, --help 输出本使用说明 命令: generate|g [type] 运行一个生成器。Type 可以是 • app - 在当前目录下创建一个新的 Feathers 应用 • authentication - 为当前应用设置身份验证 • connection - 初始化新的数据库连接 • hook - 创建一个新的钩子 • middleware - 创建一个 Express 中件间 • secret - 生成新的身份验证密钥 • service - 生成新服务 • plugin - 创建一个新的 Feathers 插件 upgrade|u 尝试自动升级到最新的Feathers版本 *
2. 通过优雅、灵活的代码保持敏捷性
我们隐藏了生成器背后的实现逻辑,现在来看一下从头开始创建REST和实时API有多容易。
安装模块化依赖项:
$ npm install @feathersjs/feathers @feathersjs/socketio @feathersjs/express feathers-memory
服务端
const feathers = require('@feathersjs/feathers'); const express = require('@feathersjs/express'); const socketio = require('@feathersjs/socketio'); const memory = require('feathers-memory'); // 创建Express兼容的Feathers应用程序 const app = express(feathers()); // 解析 HTTP JSON 请求体 app.use(express.json()); // 解析 URL-encoded 参数 app.use(express.urlencoded({ extended: true })); // 添加 REST API 支持 app.configure(express.rest()); // 配置 Socket.io 实时 APIs app.configure(socketio()); // 使用分页注册消息服务 app.use('/messages', memory({ paginate: { default: 10, max: 25 } })); // 注册比默认的Express错误处理程序更好的错误处理程序 app.use(express.errorHandler()); // 添加一个新的实时连接到'everybody'频道 app.on('connection', connection => app.channel('everybody').join(connection)); // 将所有事件发布到'everybody'频道 app.publish(data => app.channel('everybody')); // 启动服务 app.listen(3030).on('listening', () => console.log('Feathers server listening on localhost:3030') );
浏览器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Feathers Example</title> </head> <body> <h1>Welcome to Feathers<h1> <p>Open up the console in your browser.</p> <script src="//unpkg.com/@feathersjs/client@^3.0.0/dist/feathers.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script> <script type="text/javascript"> // 设置 socket.io const socket = io('http://localhost:3030'); // 设置Feathers客户端 const app = feathers(); // 注册 socket.io app.configure(feathers.socketio(socket)); // 获取与服务器通信的消息服务 const messages = app.service('messages'); // Log 新创建的消息 messages.on('created', message => { console.log('Someone created a messages', message); }); // 创建新消息然后获取所有消息列表 messages.create({ text: 'Hello from the browser' }) .then(() => messages.find()) .then(page => console.log('Messages', page)); </script> </body> </html>
React Native
import io from 'socket.io-client'; import feathers from '@feathersjs/feathers' import socketio from '@feathersjs/socketio-client' const host = 'http://localhost:3030'; const socket = io(host, { transports: ['websocket'] }); // 设置Feathers客户端 const app = feathers(); // 注册 socket.io app.configure(socketio(socket)); // 获取与服务器通信的消息服务 const messages = app.service('messages'); // 记录新创建的消息 messages.on('created', message => { console.log('Someone created a messages', message); }); // 创建新消息然后获取所有消息列表 messages.create({ text: 'Hello from the browser' }) .then(() => messages.find()) .then(page => console.log('Messages', page));
3. Feathers如此特别的原因
现代,稳固,且100%的JavaScript
Feathers基于promises和ES6功能构建,是Express和Socket.io 上的一个小巧、完全兼容的包装器,两者都已被数千家公司用于生产。
通用
Feathers可以在浏览器、React Native和Node.js服务器端使用。通过Feathers客户端,你可以快速添加身份验证,在服务器和客户端之间共享代码,并轻松实现应用。
架构友好
Feathers可以轻松地与任何客户端框架集成。无论是Angular、React还是VueJS都没问题,同样也适用于React Native。
面向服务
Feathers从开始就提供了面向服务构建的应用程序的结构。当你最终需要将应用程序拆分为微服务时,会是一个简单的过渡,你的Feathers应用程序可以轻松的扩展。
即时的实时REST API
Feathers通过Services提供即时的CRUD功能,通过Socket.io或Primus自动暴露RESTful API和实时后端。
数据存储不可知
Feathers提供了15+数据源适配器,包括MongoDB,Postgres,RethinkDB和S3。你可以在一个应用程序中使用多个数据存储区,并且由于Feathers提供一致的查询接口,来轻松地与它们交互。
灵活的插件
Feathers是“包含电池但易于更换的框架”。它有完全可选的插件,允许你实现300个Passport身份验证提供程序,灵活的授权权限以及开箱即用的SMS或电子邮件消息。