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或电子邮件消息。
