精华 使用 node-odata 轻松创建基于 OData 协议的 RESTful API
发布于 10 年前 作者 TossShinHwa 6055 次浏览 最后一次编辑是 8 年前 来自 分享

前言

OData, 对于他的实现, 博客园有童鞋进行过介绍(见:这里1,这里2). 微软的WCF Data Service即采用的该协议来进行通信, ASP.NET WEB API目前也对OData进行了支持.

我在以前的.NET项目中也一直采用OData进行数据交换. 最近转去进行NodeJS的开发, 为了便于开发, 于是便有了noda-odata–一个基于 OData 协议的 RESTful API 库. 相较于Node Express, 它能使你更容易的开发和维护您的API. 其次是让你在NodeJS里缅怀一下微软的东西:)

在线示例

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

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

下面让我们看看实现它需要多少代码.

安装

首先你需要有NodeJS环境, 点击此处安装

node-odata是需要运行在express之上的, 所以您还需要安装express以及其依赖项. (express是一个nodeJS的主流web开发框架)

npm install express --save
npm install body-parser

现在您可以安装node-odata

npm install node-odata

创建文件server.js, 输入以下代码:

var express = require('express'),
    odata = require('node-odata');
    bodyParser = require('body-parser')
var app = express();

app.use(bodyParser.urlencoded());
app.use(express.query());

odata.set('app', app);
odata.set('db', 'mongodb://localhost/my-app');
odata.resources.register({ url: '/books', model: { title: String, price: Number } });

app.listen(3000);

现在运行 node server 您即可访问http://localhost:3000/odata/books, 您可以使用以下方式亲自试试:

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

License

该项目完全开源并且基于MIT协议, 其源码托管于github node-odata, 喜欢的朋友希望能star一下:)

我使用node-odata构建了我自己个人站点的服务端, 地址戳这里.

8 回复

哪里炫酷了、、、

@TossShinHwa 我想起了我做那个分布数据库查询代理层,也是差不多这样传条件

@justjavac 好像很吊的样子, 以前一直都觉得API这边没有被认可的标准不同team之间交流起来很苦恼, 这个可以看看. links的概念在odata里面也有, odata还有定义了一个metadata可以用来检索resource的数据结构. 之前设计API的时候都是参考的这个https://github.com/interagent/http-api-design, 阮一峰有一个精简的翻译版本.

@captainblue2013 主要目的还是为了简化服务端开发, 像上面那个查询语句, 只需要注册一下资源就能查询了, 以前都需要自己搞半天. 总之我第一次看到OData这种查询的时候觉得挺酷炫的, 而且又是标准, 大家都明白之后不同team之间交流起来就不会再那么困难了, 以前想获取其他team的数据是一个挺费劲的事情.

支持原创。这种处理方法需要考虑安全问题吧?

@bnuhero 是的, 针对每个resource的GET/POST/PUT/DEL都提供了权限验证的接口. 我个人是使用express的中间件给req加上一个user, 然后判断这个user是否存在来验证的. 大概是这样的.

回到顶部