使用 node-odata 轻松创建基于 OData 协议的 RESTful API
前言
OData, 相信身为.NET程序员应该不为陌生, 对于他的实现, 之前也有童鞋进行过介绍(见:这里1,这里2). 微软的WCF Data Service即采用的该协议来进行通信, ASP.NET WEB API目前也对OData进行了支持.
我在以前的.NET项目中也一直采用OData进行数据交换. 最近转去进行NodeJS的开发, 为了减少学习成本, 于是便有了noda-odata--一个基于 OData 协议的 RESTful API 库. 相较于Node Express, 它能使你更容易的开发和维护您的API. 其次是让你在NodeJS里面还能缅怀一下微软的东西:)
在线示例
OData最大的特点就是他完全暴露的数据接口, 服务端只需要几行代码就能让客户端实现随心所欲的查询, 您可以试试:
- GET [/books?$select=title, author](http://books.woshinidezhu.com/odata/books?$select=title, author)
- GET /books?$top=3&$skip=2
- GET [/books?$orderby=price desc](http://books.woshinidezhu.com/odata/books?$orderby=price desc)
- GET [/books?$filter=price gt 10](http://books.woshinidezhu.com/odata/books?$filter=price gt 10)
- ...
很酷炫, 是吗? 你还可以任意组合查询条件, 以实现复杂查询. 比如:
- 我想看看最贵的一本书是啥名字 GET [/books?$select=title&$top=1&orderby price desc](http://books.woshinidezhu.com/odata/books?$select=title, author)
- 我想看看包含'Microsoft'关键字中, 按最便宜的排序 GET [/books?$filter=indexof(title,'Microsoft') ge 0 &orderby price desc](http://books.woshinidezhu.com/odata/books?$filter=price gt 10)
- ...
下面让我们看看实现它需要多少代码.
安装
首先你需要有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构建了我自己个人站点的服务端, 地址戳这里.
使用 node-odata 轻松创建基于 OData 协议的 RESTful API的更多相关文章
- 创建基于OData的Web API - Knowledge Builder API, Part IV: Write Controller
基于上一篇<创建基于OData的Web API - Knowledge Builder API, Part III:Write Model and Controller>,新创建的ODat ...
- 创建基于OData的Web API - Knowledge Builder API, Part I:Business Scenario
在.NET Core 刚刚1.0 RC的时候,我就给OData团队创建过Issue让他们支持ASP.NET Core,然而没有任何有意义的答复. Roadmap for ASP.NET Core 1. ...
- 基于Spring Boot的RESTful API实践(一)
1. RESTful简述 REST是一种设计风格,是一组约束条件及原则,而遵循REST风格的架构就称为RESTful架构,资源是RESTful的核心,一个好的RESTful架构,通过URL就能很 ...
- 创建基于OData的Web API - Knowledge Builder API, Part III:Write Model
在前两篇文章<Part I: Business Scenario> 和<Part II: Project Setup>后,可以开始真正Model的创建. 步骤如下: 1. 创建 ...
- 创建基于OData的Web API - Knowledge Builder API, Part II:Project Setup
本篇为Part II:Project Setup 查看第一篇<Part I: Business Scenario> 第一步,准备步骤. 准备步骤一,下载.NET Core 2.2 SDK ...
- [转]OData的初步认识 OData v4 Client Code Generator
本文转自:http://www.cnblogs.com/1zhk/p/5356053.html What – OData是什么? OData - Open Data Protocol,是一个设计和使用 ...
- 最好用的koa2+mysql的RESTful API脚手架,mvc架构,支持node调试,pm2部署。
#基于webpack构建的 Koa2 restful API 服务器脚手架 这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6, 支持使用TypeSc ...
- 创建OData Service(基于ASP.NET 4.6.1, EF 6),Part I:Project initialize
由于ASP.NET Core 1处于RC阶段,加上OData WebAPI 对ASP.NET Core 1的跟进不是很积极,基于ASP.NET Core 1的Alpha 1版本已经N月没有check ...
- ASP.NET Web API基于OData的增删改查,以及处理实体间关系
本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先是比较典型的一对多关系,Supplier和Product. public class Product { ...
随机推荐
- 使用AzCopy跨账户迁移blob
昨天北美紧急通知要停掉几个开发和测试的订阅,当天必须完成,因为事情比较多,搞得有点我措手不及,但是唯一的遗憾是Azure VM. 因为在上面做了很多东西,很多资料和环境都是做好的,如果被删除掉实在可惜 ...
- Noip2008双栈排序
[问题描述] 用两个栈使一个1...n的排列变得有序.一共有四个操作: A.stack1.push() 读入一个放入栈一 B.stack1.pop() 弹出栈一放入输出序列 C.stack2.push ...
- 【BZOJ】【1012】【JSOI2008】最大数maxnumber
线段树 ……现在再来看这题感觉好水啊,当年的大老虎现在也变成小花猫了,真是令人感动<_< /************************************************ ...
- 【翻译】Sencha Touch2.4 The Layout System 布局
[翻译]The Layout System 布局 In Sencha Touch there are two basic building blocks: componentsand containe ...
- AngularJs学习笔记--html compiler
原文再续,书接上回...依旧参考http://code.angularjs.org/1.0.2/docs/guide/compiler 一.总括 Angular的HTML compiler允许开发者自 ...
- Sqli-labs less 20
Less-20 从源代码中我们可以看到cookie从username中获得值后,当再次刷新时,会从cookie中读取username,然后进行查询. 登录成功后,我们修改cookie,再次刷新时,这时 ...
- HDU 1715 大菲波数(JAVA, 简单题,大数)
题目 //BigInteger 和 BigDecimal 是在java.math包中已有的类,前者表示整数,后者表示浮点数 import java.io.*; import java.util.*; ...
- GCD初步认识
//(1)用异步函数往并发队列中添加任务, //总结:同时开启三个子线程 - (void)test1 { //1.获得全局的并发队列 dispatch_queue_t queue = dispatch ...
- C# TryXXXX模式
public static int? TrayParse(string text) { int ret; if (int.TryParse(text,out ret)) { return ret; } ...
- BZOJ 1218: [HNOI2003]激光炸弹 前缀DP
1218: [HNOI2003]激光炸弹 Description 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标.现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值 ...