[REST API]使用 node-odata 轻松创建基于 OData 协议的 RESTful API - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ZackYang
V2EX    分享创造

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

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

    前言

    今天给小伙伴们分享一个玩具—-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     Solana     1026 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:05 PVG 02:05 LAX 11:05 JFK 14:05
    Do have faith in what you're doing.
    ubao 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