文档章节

Nodejs Restful Api几点讨论

i5ting
 i5ting
发布于 2015/08/24 23:48
字数 859
阅读 9610
收藏 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
OSChina 开源周刊 49 期,每周技术精粹

本周开源资讯 Digium 开源实时音频和视频通信 SDKs 集群管理器 Mesos 能在 Windows 上运行了! 软件更新 KDE Plasma 5.4 发布,引入 1400 多个新图标 Linux Kernel 4.2 RC8 发布 Node.js 3....

OSC编辑部
2015/08/28
2.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nginx防盗链、访问控制、Nginx解析PHP相关配置、Nginx代理

Nginx防盗链 在配置文件里写入以下内容: 用curl测试 访问控制 Nginx限制某些IP不能访问或者只允许某些IP访问。 配置文件写入如下内容: allow 表示允许访问的IP,deny限制访问的IP。 匹配正...

黄昏残影
15分钟前
0
0
自己动手实现RPC服务调用框架

转载 TCP的RPC 引言 本文利用java自带的socket编程实现了一个简单的rpc调用框架,由两个工程组成分别名为battercake-provider(服务提供者)、battercake-consumer(服务调用者)。 设计思路...

雨中漫步的鱼
17分钟前
0
0
Centos6.x安装之后的9件事

Centos6.x安装之后的9件事 这些不是必须都做的,只不过是我个人的习惯,在此记录一下。 1.修改yum源到国内 CentOS系统更换软件安装源 备份你的原镜像文件,以免出错后可以恢复。 mv /etc/yu...

叶云轩
23分钟前
5
0
springboot2 使用jsp NoHandlerFoundException

开发图片上传功能,为验证测试功能是否正常,使用JSP编写表单提交进行测试 开发完成后,请求API提示如下异常: No mapping found for HTTP request with URI [/WEB-INF/jsp/avatar_upload.j...

showlike
29分钟前
0
0
springboot踩坑记--springboot正常启动但访问404

一 spring boot的启动类不能直接放在main(src.java.main)这个包下面,把它放在有包的里面就可以了。 二 正常启动了,但是我写了一个controller ,用的@RestController 注解去配置的controlle...

onedotdot
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部