Nodejs Restful Api几点讨论
博客专区 > i5ting 的博客 > 博客详情
Nodejs Restful Api几点讨论
i5ting 发表于2年前
Nodejs Restful Api几点讨论
  • 发表于 2年前
  • 阅读 9600
  • 收藏 80
  • 点赞 5
  • 评论 10

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 关于rest api的几点讨论,比如版本控制,标准restful api,以及回答了《给mysql和mongodb提供restful接口,有啥现成的包可提供》问题

关于 rest api 版本控制

很多事情,标准和最佳实践是一种平衡

看那本rest api会被玩死,并不实用

rest本身是好东西,其实我只要取其精华就好了

没必要完全按照它做,理解状态变化就好了

标准rest api

自己去实现一下,https://developer.github.com/v3/

写起来还是挺那啥的,举个例子

Current Version

By default, all requests receive the v3 version of the API. We encourage you to explicitly request this version via the Accept header.

Accept: application/vnd.github.v3+json

核心是We encourage you to explicitly request this version via the Accept header.,这是非常标准的rest api写法

可是有多人理解Content-Type(Mime-Type)是啥呢?尤其还要自定义,如果你不理解怎么能用好呢?

再举个例子:link-header

https://developer.github.com/v3/#link-header

The pagination info is included in the Link header. It is important to follow these Link header values instead of constructing your own URLs. In some instances, such as in the Commits API, pagination is based on SHA1 and not on page number.

Link: <https://api.github.com/user/repos?page=3&per_page=100>; rel="next",
  <https://api.github.com/user/repos?page=50&per_page=100>; rel="last"

分页信息里包含link-header,是非常好的表达了状态,从上面的例子,我们可以很轻松的理解下一页和最后一页的

但问题是

  • 很多人不一定理解这种状态是如何用的,对开发的要求还是比较高的
  • 请求的response里增加了这些描述信息,是否真的必要呢?

土,也未必一定不好

标准和最佳实践是一种平衡,一种取舍,有些事情是做了锦上添花,有的是必须的,那么我们能做的就是,做好必须得,如果能锦上添花更好

现实中的开发还是按照自己项目情况来取舍的。

举个土,但实用的例子:微博的接口

它是比较适合国人思维的

http://open.weibo.com/wiki/2/statuses/public_timeline

约定也许更好

比如我写的res.api就是一个约定

res.api is an express middleware for render json api , it convention over api format like this :

{
  data: {

  },
  status: {
    code : x,
    msg  : 'some message'
  }
}

如果api都这样约定,开发速度会非常快,而且简单

moa-api里如何做法?

mount-routes里使用的是mount-routes

mount-routes里的做法是自动加载某个目录,比如app/routes下的所有目录,子目录作为路由

api的设计可以这样玩

app/routes/api/v3/users

它可以自动映射到url里,对于版本控制还是比较友好的

给mysql和mongodb提供restful接口,有啥现成的包可提供吗?

先给几个简单的

  • restify
  • hapi
  • sails
  • loopback

其实还有一个我的解决方案,使用我的moajs

首先创建moajs插件

nmm init

使用脚手架,创建模型和基本的rest接口

moag location name:string order_num:string is_full:string  is_available:string warehouse_id:string shelf_id:string

这里会自动创建api目录和对应的文件的

测试这些接口,执行moas即可

moas

这样就可以测试接口了。

目前moajs的状态实现了足够的features,但稳定性和文档等不足,各位可以先拿moa-api玩玩,其他高级特性待稳定后放出

全文完

欢迎关注我的公众号【node全栈】

node全栈.png

共有 人打赏支持
粉丝 173
博文 66
码字总数 78270
作品 3
评论 (10)
i5ting
RESTful Web APIs中文版 也是不错的
haitaosoft
完全按restful,是有点学究了。
rest的根本在于key/value表达方式,早期的url已经自然采用k/v模式
i5ting

引用来自“haitaosoft”的评论

完全按restful,是有点学究了。
rest的根本在于key/value表达方式,早期的url已经自然采用k/v模式
k/v是状态转换,用这个来理解rest非常合适,它本身就是表述性状态转移
The-Dawn
虽然不太懂,还是点个赞
thankjava
楼主有研究过nodejs thrift 和其他语言交互么,我最近想用他和java交互,遇到一个难题
i5ting

引用来自“thankjava”的评论

楼主有研究过nodejs thrift 和其他语言交互么,我最近想用他和java交互,遇到一个难题
github上sohu出了nodejs的thift库,可以到上面提issue
bigbowl
3
bigbowl
表情呢
苏生不惑
关注微信了
i5ting

引用来自“苏生不惑”的评论

关注微信了
欢迎一切和node全栈有关的问题和谈讨论
×
i5ting
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: