关于使用REST API

设计REST API的请求处理部分

REST API功能

通常, 我们希望借助REST API完成以下操作 
- 创建一个新记录 
- 读取一个list的记录 
- 读取指定的记录 
- 更新指定记录 
- 删除指定记录

假如我们现在要创建的是地址记录, 假定我们要使用的URL路径是/locations, 那么各个操作对应到URL路径之后如下表所示

动作URL路径路径参数例子
创建一个新记录/locations http://example/api/locations
读取一个list的记录/locations http://example/api/locations
读取指定的记录/locationslocationIdhttp://example/api/locations/123
更新指定记录/locationslocationIdhttp://example/api/locations/123
删除指定记录/locationslocationIdhttp://example/api/locations/123

通过上表可以看出, 多个不同的动作可能对应的是相同的URL路径, 那么如何进行动作的区分呢? 答案是通过HTTP请求类型来判断.

HTTP请求类型

通常, REST API使用到四种HTTP请求, 它们的用途和相应如下所示

HTTP请求类型用途响应
POST创建新记录数据库中插入新记录
GET读取记录从数据库返回指定记录
PUT更新记录更新数据库中的指定记录
DELETE删除记录数据库中指定记录被删除

结合HTTP请求类型和URL路径确定唯一的操作

动作HTTP请求类型URL路径路径参数例子
创建一个新记录POST/locations http://example/api/locations
读取一个list的记录GET/locations http://example/api/locations
读取指定的记录GET/locationslocationIdhttp://example/api/locations/123
更新指定记录PUT/locationslocationIdhttp://example/api/locations/123
删除指定记录DELETE/locationslocationIdhttp://example/api/locations/123

使用REST API操作子文档

以上介绍都是REST API操作父文档, 如果想操作子文档, 首先需要获取到父文档, 也就是如上表中的http://example/api/locations/123这样的路径, 现在假定每个location文档中还内嵌了名为reviews的子文档, 那么它所对应的操作如下

动作HTTP请求类型URL路径路径参数例子
创建一个新记录POST/locations/locationId/reviewslocationIdhttp://example/api/locations/123/reviews
读取指定的记录GET/locations/locationId/reviewslocationId
reviewId
http://example/api/locations/123/reviews/abc
更新指定记录PUT/locations/locationId/reviewslocationId
reviewId
http://example/api/locations/123/reviews/abc
删除指定记录DELETE/locations/locationId/reviewslocationId
reviewId
http://example/api/locations/123/reviews/abc

注意, 子文档的操作并没有一个读取list的操作, 因为这个操作可以通过对父文档操作进行实现.

设计REST API响应(Response)和状态码

REST API的另一部分就是响应的设计, 响应一般来说包含两个部分: 
- 返回数据 
- HTTP状态码

对于返回数据, 通常是JSON或者XML类型的, 这里我们选择JSON类型, 因为它比XML数据更加紧凑, 并且天然适应MEAN技术栈. 对于每个请求, 返回数据都应该有三种类型: 
- 包含正确返回的被请求数据的JSON对象 
- 包含错误信息的JSON对象 
- null响应

常用的HTTP状态码

HTTP状态码通常是用来和响应一同返回的, 用于表明HTTP请求的执行情况.

常用的HTTP状态码共有10种

状态码名称适用场景
200OKGET或者PUT请求成功
201CreatedPOST请求成功
204No contentDELETE请求成功
400Bad requestGETPUT或者POST请求由于内容不符合标准而失败
401Unauthorized身份验证未通过
403Forbidden不允许的请求
404Not found请求的URL没有资源或者参数错误
405Method not allowed指定的URL不允许此种请求类型
409ConflictPOST失败, 试图插入重复数据
500Internal server error服务器或数据库故障

在Express中建立响应API

使REST API不与应用的其他处理逻辑混杂, 所以这里我们单独对其进行管理.

首先, 在应用的根目录新建一个app_api目录, 这个目录将会包含routescontrollersmodels(注意并没有views)

创建REST API路由

首先创建根路由, 也就是index.js, 并将其加载到app.js中,

var index = require('./app_server/routes/index');
// 以下是新增的路由
var apiIndex = require('./app_api/routes/index');
app.use('/', index);
// 以下是新增的路由
app.use('/api', apiIndex);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值