文档章节

Nodejs Restful Api几点讨论

i5ting
 i5ting
发布于 2015/08/24 23:48
字数 859
阅读 9613
收藏 80

关于 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

© 著作权归作者所有

共有 人打赏支持
i5ting
粉丝 189
博文 68
码字总数 98509
作品 3
东城
加载中

评论(10)

i5ting
i5ting

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

关注微信了
欢迎一切和node全栈有关的问题和谈讨论
苏生不惑
苏生不惑
关注微信了
bigbowl
bigbowl
表情呢
bigbowl
bigbowl
3
i5ting
i5ting

引用来自“thankjava”的评论

楼主有研究过nodejs thrift 和其他语言交互么,我最近想用他和java交互,遇到一个难题
github上sohu出了nodejs的thift库,可以到上面提issue
thankjava
thankjava
楼主有研究过nodejs thrift 和其他语言交互么,我最近想用他和java交互,遇到一个难题
--0_0--
--0_0--
虽然不太懂,还是点个赞
i5ting
i5ting

引用来自“haitaosoft”的评论

完全按restful,是有点学究了。
rest的根本在于key/value表达方式,早期的url已经自然采用k/v模式
k/v是状态转换,用这个来理解rest非常合适,它本身就是表述性状态转移
haitaosoft
haitaosoft
完全按restful,是有点学究了。
rest的根本在于key/value表达方式,早期的url已经自然采用k/v模式
i5ting
i5ting
RESTful Web APIs中文版 也是不错的
通过Express4构建Restful API服务器 - 结合AngularJS前后端分离开发

初衷 很久没有写Nodejs了,记得去年还很兴致勃勃的打算搞一搞,结果工作一变动大半年都扑在了项目上,玩起了AngularJS. 最近打算做项目的架构转型,也是受了"前后端二次分离"的大浪潮的影响,看了...

顽Shi
2014/11/26
0
4
使用 Hapi 开发 RESTful APIs

搜了国内的文章 使用 开发 的很少很少,一些 社区介绍的部分在新版本中已经不在适用,新版本中有很多变化 什么是 RESTful API: REST -- REpresentational State Transfer,英语的直译就是“表...

fairyly
07/31
0
0
Node.js非阻塞IO和事件循环学习总结

  学习和使用Node.js已经有两个月,使用express结合mongoose写了一个web应用和一套RESTful web api,回过头来看Node.js官网首页对Node.js的介绍:Node.js uses an event-driven, non-block...

LeoG0816
2014/09/14
0
10
NodeJS优缺点及适用场景讨论

本文就个人使用经验对这些问题进行探讨。 一. NodeJS的特点 我们先来看看NodeJS官网上的介绍: Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, sc...

liuhao_sh
2015/08/13
0
0
柏林纪行(中):Node.js Collaboration Summit

传送门: 柏林纪行(上):整体感受 柏林纪行(中):Node.js Collaboration Summit 柏林纪行(下):JSConf EU Node.js Collaboration Summit 比较沉重的思考写完,下面是比较轻松的部分了…...

_朴灵_
05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部