node-odata: ASP.NET WEB API OData 的替代品 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ZackYang
V2EX    API

node-odata: ASP.NET WEB API OData 的替代品

  •  
  •   ZackYang
    TossShinHwa 2015-07-31 10:03:52 +08:00 2381 次点击
    这是一个创建于 3794 天前的主题,其中的信息可能已经有所发展或是发生改变。

    什么是 OData 协议?

    OData, 相信身为 .NET 程序员应该不为陌生, 尤其是它的实现: ASP.NET WEB API OData. 对于 OData, 官网上对其的定义是

    OData - the best way to REST An open protocol to allow the creation and consumption of queryable and interoperable RESTful APIs in a simple and standard way. 

    可见 OData 是一个基于 REST 的 数据协议. OData 全名"开放数据协议(Open Data Protocol)", 是一个用于 web 的数据访问协议. OData 提供了一个统一的风格来来查询和维护数据集. 这里有一篇博文描述了 OData 想要解决的问题: 关于 OData 协议.

    什么是 node-odata?

    node-odata 是完全遵循 OData V4 协议实现的一套 OData REST API 框架, 它基于 NodeJS, 使用 ECMAScript 6 编写, 发布于 npm.

    为什么使用 node-odata?

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

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

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

    示例

    OData最大的特点就是他完全暴露的数据接口, 服务端只需要几行代码就能让客户端实现随心所欲的查询, 下面以一个图书 API 为例:

    1. 查询所有图书, 并只返回标题以及作者.
    2. 按价格对图书进行排序, 并返回第 3 ~ 5 条记录.
    3. 查询价格高于 $40 的图书.
    4. 很酷炫, 对吗? 也许, 你需要更复杂的查询组合, 比如: 查询标题中含有 'XML', 价格小于 $30, 并且按价格排序返回最便宜的一本的标题和价格.
      • GET /book?$filter=indexof(title,'XML') ge 0 and price lt 30&$orderby=price&$top=1&$select=title, price

    而实现这一切功能, 只需要 4 行代码.

    快速开始

    首先你需要安装 NodeJS 以及 MongoDB.

    安装完成并启动 MongoDB 之后, 您可以开始安装 node-odata

    $ npm install node-odata 

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

    var odata = require('node-odata'); var server = odata('mongodb://localhost/my-app'); server.resource('books', { title: String, price: Number }); server.listen(3000); 

    保存并运行

    $ node server 

    您即可访问 http://localhost:3000/books, 您可以使用以下方式亲自试试:

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

    文档

    完整的 API 文档见 这里.

    实例

    我使用 node-odata 构建了我自己个人站点: zackyang.com, 源码 请戳这里.

    License

    该项目基于 MIT 协议, 其源码托管于 github, 欢迎点赞.

    1 条回复    2015-07-31 10:10:11 +08:00
    ZackYang
        1
    ZackYang  
    OP
       2015-07-31 10:10:11 +08:00
    该开源项目目前已被 OData 官网 (odata.org)收录, npm 月下载量 2k+.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2776 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 10:54 PVG 18:54 LAX 02:54 JFK 05:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86