V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ZackYang
V2EX  ›  分享创造

[REST API]使用 node-odata 轻松创建基于 OData 协议的 RESTful API

  •  
  •   ZackYang ·
    TossShinHwa · 2014-10-17 22:08:16 +08:00 · 5715 次点击
    这是一个创建于 3698 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    今天给小伙伴们分享一个玩具—-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构建了我自己个人站点的服务端, 地址戳这里.

    6 条回复    2014-10-21 22:17:31 +08:00
    egen
        1
    egen  
       2014-10-17 22:37:18 +08:00
    看起来不错,mark 一个
    Comdex
        2
    Comdex  
       2014-10-18 10:06:22 +08:00
    如果golang也有相应的实现就好了
    gkuchan
        3
    gkuchan  
       2014-10-18 17:04:41 +08:00
    问问有没有ODATA好的学习文章,对ODATA不了解。
    ZackYang
        4
    ZackYang  
    OP
       2014-10-18 17:55:12 +08:00
    @gkuchan odata是一个协议,
    1. 如果是想了解这个协议本身可以看看他的标准文档http://docs.oasis-open.org/odata/odata/v4.0/os/part1-protocol/odata-v4.0-os-part1-protocol.html
    2. 如果想使用odata作为数据交换协议, 有很多类库提供了支持, 比如ASP.NET WEB API OData, 和本文的node-odata :)
    ZackYang
        6
    ZackYang  
    OP
       2014-10-21 22:17:31 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6129 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.