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 · 2045 次点击
    这是一个创建于 3413 天前的主题,其中的信息可能已经有所发展或是发生改变。

    什么是 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   ·   实用小工具   ·   1349 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:55 · PVG 01:55 · LAX 09:55 · JFK 12:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.