node-odata: ASP.NET WEB API OData的替代品
什么是 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 为例:
- 查询所有图书, 并只返回标题以及作者.
- GET [/book?$select=title, author](http://books.zackyang.com/book?$select=title, author)
- 按价格对图书进行排序, 并返回第 3 ~ 5 条记录.
- GET [/book?$top=3&$skip=2&$orderby=price desc](http://books.zackyang.com/book?$top=3&$skip=2&$orderby=price desc)
- 查询价格高于 $40 的图书.
- GET [/book?$filter=price gt 40](http://books.zackyang.com/book?$filter=price gt 40)
- 很酷炫, 对吗? 也许, 你需要更复杂的查询组合, 比如: 查询标题中含有 'XML', 价格小于 $30, 并且按价格排序返回最便宜的一本的标题和价格.
- GET [/book?$filter=indexof(title,'XML') ge 0 and price lt 30&$orderby=price&$top=1&$select=title, price](http://books.zackyang.com/book?$filter=indexof(title,'XML') ge 0 and price lt 30&$orderby=price&$top=1&$select=title, price)
而实现这一切功能, 只需要 4 行代码.
快速开始
安装完成并启动 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, 欢迎点赞.
node-odata: ASP.NET WEB API OData的替代品的更多相关文章
- 对一个前端AngularJS,后端OData,ASP.NET Web API案例的理解
依然chsakell,他写了一篇前端AngularJS,后端OData,ASP.NET Web API的Demo,关于OData在ASP.NET Web API中的正删改查没有什么特别之处,但在前端调 ...
- 如何使用ASP.NET Web API OData在Oracle中使用Entity Framework 6.x Code-First方式开发 OData V4 Service
环境: Visual Studio 2013 + .Net Framework 4.5.2 1.新建项目 2.安装OData,ODP.NET 安装的包: 下面是部分代码: using System; ...
- [转]Getting started with ASP.NET Web API OData in 3 simple steps
本文转自:https://blogs.msdn.microsoft.com/webdev/2013/01/29/getting-started-with-asp-net-web-api-odata-i ...
- [转]Support Composite Key in ASP.NET Web API OData
本文转自:https://code.msdn.microsoft.com/Support-Composite-Key-in-d1d53161 he default EntitySetControlle ...
- [转]Supporting OData Query Options in ASP.NET Web API 2
本文转自:https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/suppor ...
- Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)
前言 很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路.本文已同步到Web API2系列文章中http://www.cnblogs.com/aehyok/p/3446289.html ...
- [转]ASP.NET Web API对OData的支持
http://www.cnblogs.com/shanyou/archive/2013/06/11/3131583.html 在SOA的世界中,最重要的一个概念就是契约(contract).在云计算的 ...
- [转]ASP.NET web API 2 OData enhancements
本文转自:https://www.pluralsight.com/blog/tutorials/asp-net-web-api-2-odata-enhancements Along with the ...
- [转]Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)
本文转自:http://www.cnblogs.com/aehyok/p/3545824.html 前言 很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路.本文已同步到Web API ...
随机推荐
- Socket 一对多通信
服务器(TCPServer.java): package visec; import java.net.*; import java.io.*; public class TCPServer{ pub ...
- socket 套接字
网络:交换机,路由器,网线 交换机:分配.. 路由器:找寻网络线路 网络架构: 应用层 ---> 表示层 ---> 会话层 ---> 传输层 ---> 网络层 ---> ...
- websphere OSGi应用环境下服务调用saaj包加载问题分析报告
websphere OSGi应用环境下服务调用saaj包加载问题分析报告 作者:bingjava 版权声明:本文为博主原创文章,转载请说明出处:http://www.cnblogs.com/bingj ...
- STL容器的适用情况
转自http://hsw625728.blog.163.com/blog/static/3957072820091116114655254/ ly; mso-default-props:yes; m ...
- selenium--下拉列表选择
html 代码: <select name="ColumnId" id="columnOrd"> <option value="2& ...
- [转载]115个Java面试题和答案
不知道大家有没有这样的体会,就是找工作的时候不得不准备大量面试题,而工作的时间长了面试题里的精髓却忘的差不多了... 转载几篇Java面试的bolg,温故而知新,最重要的是常来看看. 1. http: ...
- matrix_world_final_2011
C http://acm.hust.edu.cn/vjudge/contest/view.action?cid=98613#problem/C 题意:输入16进制的n*m矩阵,其在二进制表示下有6种 ...
- E3: PS4/PC 莎木3 众筹200万美元 9小时内达成
这次E3任天堂没有新掌机(传说中的XDS呢.呵呵)和口袋的消息, 被喷得很严重, 索尼的FF7重制版和莎木3是亮点. 而莎木3的众筹速度据说创了记录, 玩家的情怀大胜. 笔者看到国内也有赞助几十刀的玩 ...
- angularjs取Sevice和directive的引用
取Sevice和directive的引用 3: Grab any Services We can grab a reference to any service using the injector ...
- ISIN编码
国际证券识别编码(ISIN编码)是由国际标准化组织(ISO)制定的证券编码标准,并在<证券及相关金融工具-国际证券识别编码体系>(ISO6166)中正式发布.ISO6166主要规定了ISI ...