Nodejs node-odata: 基于 NodeJS 的 REST 框架

Nodejs node-odata: 基于 NodeJS 的 REST 框架

关于 node-odata

node-odata 可以让你轻松创建 REST API, 并能使用 OData 协议的格式进行数据的查询. 它让你可以更方便的创建 API 服务, 使你更专注于业务逻辑的处理.

什么是 OData 协议?

OData 全称开放数据协议(Open Data Protocol), 是一个用于 web 的数据访问协议. OData 提供了一个统一的 CRUD (create, read, update, and delete) 操作来查询和维护数据集.

为什么使用 node-odata?

node-odata 同时结合了 OData 强大的数据查询能力以及 NodeJS 高并发能力的优势, 使开发者能快速的创建一个高性能并支持各种复杂查询的 REST API.

在常规的 REST 框架中, 仅仅提供了 REST 风格的 CRUD 操作. 开发者不的不对每一个资源都手动添加一些公共功能, 如排序/分页等, 甚至在复杂的业务场景中, 开发者不的不一次次根据业务需求制定一些特定的复杂查询, 这都极大的浪费了人力资源. OData数据访问协议很好的解决了这一问题. 它定义了$filter, $orderby, $select等一系列关键字来进行统一的筛选, 排序, 分页等操作. 极大的减轻了开发者的负担, 提高了生产力.

反观 OData 社区, 目前 node-odata 是唯一一款基于 NodeJS 的 OData 实现. 与其它编译型语言的 OData 实现相比, 它运行更加高效, 部署更加方便, 编写更加简单 (最短只需3行代码即可初始化一个 OData 服务).

0) Demo

OData最大的特点就是他完全暴露的数据接口, 服务端只需要几行代码就能让客户端实现随心所欲的查询, 您可以试试:

很酷炫, 是吗? 你还可以任意组合查询条件, 以实现复杂查询. 比如:

1) 安装

node-odata 的运行需要依赖于 NodeJSMongoDB, 在安装了依赖项之后, 运行以下命令即可:

$ npm install node-odata

2) 快速开始

这里我们讲创建并运行一个最简单的 OData 服务.

2.1 创建服务

安装完成后, 新建 index.js 文件并输入:

var odata = require('node-odata');

odata.set(‘db’, ‘mongodb://localhost/my-app’);

odata.resources.register({ url: ‘/books’, model: { title: String, price: Number } });

odata.listen(3000);

2.2 运行服务

保存后输入以下命令即可启动 OData 服务:

$ node index.js

它将自动注册以下路由:

GET    /odata/books
GET    /odata/books/:id
POST   /odata/books
PUT    /odata/books/:id
DELETE /odata/books/:id

(点击 这里 查看完整文档)

(查看 GitHub Page 请点击 这里)


16 回复

该开源项目目前已被 OData 官网 (odata.org)收录


Nodejs node-odata: 基于 NodeJS 的 REST 框架

关于 node-odata

node-odata 可以让你轻松创建 REST API,并能使用 OData 协议的格式进行数据的查询。它让你可以更方便地创建 API 服务,使你更专注于业务逻辑的处理。

什么是 OData 协议?

OData(开放数据协议)是一个用于 Web 的数据访问协议。OData 提供了一个统一的 CRUD(创建、读取、更新、删除)操作来查询和维护数据集。

为什么使用 node-odata?

node-odata 结合了 OData 强大的数据查询能力和 NodeJS 的高并发能力,使得开发者能够快速创建高性能且支持各种复杂查询的 REST API。

在常规的 REST 框架中,只提供了 REST 风格的 CRUD 操作。开发者不得不对每个资源手动添加一些公共功能,如排序、分页等。在复杂的业务场景中,开发者不得不一次次根据业务需求制定一些特定的复杂查询,这都极大地浪费了人力资源。OData 数据访问协议很好地解决了这一问题。它定义了 $filter, $orderby, $select 等一系列关键字来进行统一的筛选、排序、分页等操作,极大地减轻了开发者的负担,提高了生产力。

反观 OData 社区,目前 node-odata 是唯一一款基于 NodeJS 的 OData 实现。与其他编译型语言的 OData 实现有相比,它运行更加高效,部署更加方便,编写更加简单(最短只需3行代码即可初始化一个 OData 服务)。

0) 示例

OData 最大的特点是它完全暴露的数据接口。服务端只需要几行代码就能让客户端实现随心所欲的查询。你可以试试:

  • GET /books
  • GET /books?$select=title, author
  • GET /books?$top=3&$skip=2
  • GET /books?$orderby=price desc
  • GET /books?$filter=price gt 10

这些查询非常酷炫,你还可以任意组合查询条件以实现复杂查询。例如:

  • 我想看看最贵的一本书是什么名字
    • GET /books?$select=title&$top=1&orderby=price desc
  • 我想看看包含 “Microsoft” 关键字的书按最便宜的排序
    • GET /books?$filter=indexof(title,'Microsoft') ge 0 &$orderby=price asc

1) 安装

node-odata 的运行需要依赖于 NodeJSMongoDB。在安装了依赖项之后,运行以下命令即可:

$ npm install node-odata

2) 快速开始

这里我们将创建并运行一个最简单的 OData 服务。

2.1 创建服务

安装完成后,新建 index.js 文件并输入以下代码:

var odata = require('node-odata');

// 设置 MongoDB 数据库连接
odata.set('db', 'mongodb://localhost/my-app');

// 注册资源
odata.resources.register({
    url: '/books',
    model: {
        title: String,
        price: Number
    }
});

// 启动服务监听
odata.listen(3000);
2.2 运行服务

保存文件后,输入以下命令启动 OData 服务:

$ node index.js

它将自动注册以下路由:

GET    /odata/books
GET    /odata/books/:id
POST   /odata/books
PUT    /odata/books/:id
DELETE /odata/books/:id

更多详细信息请参阅完整文档或查看 GitHub Page

还没有去读oData的文档,先问一下,支持按某时间格式字段进行一段时间的数据查询么?

[@airyland](/user/airyland) 可以, 大概是这样的:

$filter=date('2014-12-01') lt date(DateField) and date(DateField) lt date('2014-12-05')

time 也是支持的, 不过更常用的是 year / month / day, 比如我想查2014年12月的数据:

$filter=year(DateField) eq 2014 and month(DateField) eq 12

详见: http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398303

赞一个,我不懂, 所以我要赞一下

[@gangdiedao](/user/gangdiedao) 额, 试用一下是更好的鼓励. 我就是这么得寸进尺.

[@TossShinHwa](/user/TossShinHwa) 试了一下,咦 不错哦,可惜文档内容太少了

可以和express兼容吗?看到需要看odata.listen(3000);有端口占用的话怎么搞?还有个问题model的index可以自定义吗?

[@whwnow](/user/whwnow) 框架本身就是基于express 开发的,你可以看它的源码就知道了

[@whwnow](/user/whwnow) 挖了一下楼主的例子 https://github.com/TossShinHwa/CMS 这个就是用node-odata写的 不过本地测试js报一大堆错,你可已去看下

[@gangdiedao](/user/gangdiedao) 不会报错吧, 我线上的版本运行的好好的-.- zackyang.com 另外文档, 这里 有一个中文的哟, 不知道你发现了没.

[@whwnow](/user/whwnow), [@gangdiedao](/user/gangdiedao) 是的, 其实内部就是 express, 不过说不定什么时候就把它去掉了^^.

[@TossShinHwa](/user/TossShinHwa) 不更新了? 怎么文档还是一样

[@gangdiedao](/user/gangdiedao) 感谢关注. 目前在另一个分支上干活, 还没有合并. (其实是还木有从春节的暴饮暴食中恢复过来 T_T )

[@TossShinHwa](/user/TossShinHwa) 不更新了? $filter=(contains(title,'2')) or (date eq '2') 报错 Syntax error at \'(contains(title,\'2\'))\'. 去掉外层的括号$filter=contains(title,'2') or date eq '2'不报错但是无结果(其实应该有数据)

关注下,大佬还更新吗

来自酷炫的 CNodeMD

Node.js node-odata: 基于 NodeJS 的 REST 框架

node-odata 是一个轻量级的库,可以让你轻松地创建 REST API,并且能够通过 OData 协议的格式进行数据查询。这使得你可以更专注于业务逻辑而不是繁琐的数据处理。

什么是 OData 协议?

OData(开放数据协议)是一种用于 Web 的数据访问协议,它提供了一种标准的方式来查询和维护数据集。通过 OData,你可以执行常见的 CRUD(创建、读取、更新、删除)操作,并且可以使用一系列关键字(如 $filter, $orderby, $select 等)来对数据进行筛选、排序和分页。

为什么使用 node-odata?

node-odata 结合了 OData 的强大查询能力和 NodeJS 的高并发能力,使得开发者能够快速创建高性能的 REST API。相比于传统的 REST 框架,node-odata 能够减少大量的重复劳动,例如手动添加排序、分页等功能。

示例代码

安装

首先确保已经安装了 NodeJS 和 MongoDB,然后安装 node-odata

$ npm install node-odata

创建服务

创建一个 index.js 文件并输入以下代码:

var odata = require('node-odata');

// 设置数据库连接
odata.set('db', 'mongodb://localhost/my-app');

// 注册资源模型
odata.resources.register({
    url: '/books',
    model: {
        title: String,
        price: Number
    }
});

// 启动服务监听端口
odata.listen(3000);

运行服务

保存文件后,在终端中运行以下命令启动服务:

$ node index.js

此时,服务会自动注册以下路由:

GET    /odata/books
GET    /odata/books/:id
POST   /odata/books
PUT    /odata/books/:id
DELETE /odata/books/:id

使用示例

假设我们想获取所有书籍的列表,并且只显示 titleauthor 字段,可以通过以下 URL 进行查询:

GET http://localhost:3000/odata/books?$select=title,author

如果想获取价格大于 10 的书籍,可以这样查询:

GET http://localhost:3000/odata/books?$filter=price gt 10

通过这些简单的示例,你可以看到 node-odata 的强大之处。你可以通过组合不同的查询参数来实现复杂的查询,而无需编写复杂的逻辑代码。

回到顶部