文档章节

Nodejs Restful Api几点讨论

i5ting
 i5ting
发布于 2015/08/24 23:48
字数 859
阅读 9610
收藏 80
点赞 5
评论 10

关于 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
粉丝 185
博文 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交互,遇到一个难题
The-Dawn
The-Dawn
虽然不太懂,还是点个赞
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中文版 也是不错的
柏林纪行(中):Node.js Collaboration Summit

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

_朴灵_ ⋅ 05/14 ⋅ 0

4.1 火车票代售点----后端API和开放平台

后端API长什么样? 开放平台其实都是开放API, 那么API又是什么呢?简单理解就是url,就是增删改查, 之前说过的就是前端/移动端对后端的数据请求,攻与受。 先看看API长什么样。 htttp://ww...

产品经理的技术课堂 ⋅ 05/01 ⋅ 0

利用 Node.js 实现 SAP Hana 数据库编程接口

自 SAP HANA SP 11 之后,可以使用 Node.js 作为 Hana 的编程接口。SAP 将 Application server 简称为 XS。现在 XS 已经演化为 Advanced 版本。为了区别,早期的 XS 被称为 XS Classical。 ...

前端热爱者 ⋅ 05/16 ⋅ 0

OSChina 开源周刊 49 期,每周技术精粹

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

OSC编辑部 ⋅ 2015/08/28 ⋅ 0

Nodejs MVC 框架--Monk.Node

Monk.Node Monk.Node 是基于 Express.js(4.x) + Sequelize.js(3.x) 的 Nodejs MVC 框架。 框架特点: 基于Node.js平台开发,Javascript作为主要编写语言 极易入门,前后端开发者都能快速上手...

百小僧 ⋅ 2016/12/13 ⋅ 4

NodeJS优缺点及适用场景讨论

NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 我关于node.js长处的理解: 1、node.js通...

金馆长1 ⋅ 2015/09/17 ⋅ 0

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

Node.js Interactive 2016 North America 纪行

原作者:洗影 受 Node.js 基金会的邀请到 Node.js Interactive 2016 North America 做了一次 talk,以下是个人的一些记录。 关于 Node.js Interactive Node.js 相关的技术会议主要包括 每年夏...

_朴灵_ ⋅ 05/14 ⋅ 0

服务器脚手架--koa2-API-scaffold

Koa2 RESTful API 服务器脚手架 这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6。 约定使用 JSON 格式传输数据,POST、PUT、DELET 方法支持的 Content-Type 为 可配置支持...

轶哥 ⋅ 2017/02/09 ⋅ 0

细说 Django—web 前后端分离

本周为大家带来【51Reboot】运维自动化公开课分享,4 月 26 日(周四)晚九点由我们的咸鱼老师为大家细说 Django — web 前后端分离。 讲师介绍 咸鱼老师:曾担任互联网二手车公司运维开发负...

xjtuhit ⋅ 04/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 48分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 58分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 今天 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 今天 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部