RESTful概述

RESTful是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

REST是Representational State Transfer的缩写,是Roy Thomas Fielding在他2000年的博士论文中提出的。其提出的设计概念和准则为:

1. 网络上的所有事物都可以抽象为资源

2. 每个资源都应该有唯一的标识(identifier),对资源的操作不会改变标识

3. 所有的操作都是无状态的

4. 使用标准方法(GET、POST、PUT、PATCH、DELETE)操作资源

RESTful使用

HTTP方法 URI 描述 幂等 安全
 GET  /api/members  获取成员列表  是  是
 GET  /api/members/{id}   获取指定成员  是  是
 POST  /api/members  创建一个成员  否  否
 PUT  /api/members/{id}   更新成员所有信息  是  否
 PATCH  /api/members/{id}   更新成员部分信息  是  否
 DELETE  /api/members/{id}   删除指定成员  是  否
HTTP方法 URI 描述 幂等 安全
 GET  /api/groups  获取群组列表  是  是
 GET  /api/groups/{id}  获取指定群组  是  是
 POST  /api/groups  创建一个群组  否  否
 PUT  /api/groups/{id}  更新群组所有信息  是  否
 PATCH  /api/groups/{id}  更新群组部分信息  是  否
 DELETE  /api/groups/{id}  删除指定群组  是  否
 GET  /api/groups/{id}/members  获取指定群组下的成员  是  是
 GET  /api/groups/{id}/members/{memberId}  获取指定群组下的指定成员  是   是

幂等性:同一个RESTful接口的多次访问,得到的资源状态是相同的。

安全性:对该RESTful接口访问,不会使服务端资源的状态发生改变。

规范建议

1. API尽量采用通过安全通道的HTTPS协议(https)。

  

2. 请求体与响应体统一通过json格式来承载,json使用Camel的命名规则,媒体类型需设置为“application/json”。

示例:

Request

  Accept: application/json

  Content-Type: application/json

Response

  Content-Type: application/json

3. 请求体与响应体统一采用UTF-8编码格式,时间统一使用UTC格式:yyyy-MM-dd'T'HH:mm:ss[.SSS]'Z'。

4. URI模版:/{domain}/{service or module}/api/{version}/{resource},URI应全为小写字母,短语单词使用“-”分隔。

名称 说明 示例
 domain  领域名称,不需要区分领域时,可以不指定

education(教育领域)

finance(金融领域)

game(游戏领域)

 service or module  服务或模块名

account(账户模块)

order(订单服务)

storage(库存服务)

 version  版本号

v1

v2

v3

 resource  服务或模块内资源

users(用户)

products(产品)

members(成员)

5. 资源增、删、改、查外的操作,采用模板:/{domain}/{service or module}/api/{version}/{resource}/action/{action}。

示例:/common/account/api/v1/users/action/login

响应消息建议

1. 获取资源列表成功返回,响应消息体中包含记录总条数、当前页码、每页记录,以及对应的资源。

示例:

Response Body

{

  "total": xxx,

  "pageIndex": xxx,

  "pageSize":xxx,

  "records":[

    { "id": xxx, "name":"xxx" },

    { "id": xxx, "name":"xxx" }

  ]

}

2. 获取指定资源成功返回200,响应消息体中包含该资源的信息。

3. 创建资源成功返回,并在响应消息头中包含定位该资源的地址。

示例:

Response Headers

{
  "pragma": "no-cache",
  "server": "xxx",
  "content-type": "application/json; charset=utf-8",
  "location": "https://xxx/api/users/xxx", //资源访问地址
  "content-length": "xxx"
}

4. 资源更新成功返回,并在响应消息中体返回更新后的资源内容。

5. 资源删除成功返回,响应消息体无内容。

6. 针对400 Bad Request客户端错误,可以在响应消息体中扩展状态码。

示例:

Response Code

401 Bad Request

Response Body

{

  "code": 400001,

  "message": "用户名或密码错误"

}

----------------------------------------------------------

Response Code

401 Bad Request

Response Body

{

  "code": 400002,

  "message": "邮箱已存在"

}

----------------------------------------------------------

Response Code

401 Bad Request

Response Body

{

  "code": 400003,

  "message": "邮箱地址错误"

}

7. 针对5XX的服务端错误,只在响应消息体中提供简单提示,不可打印错误日志信息。

示例:

Response Body

{

  "message": "内部错误,请稍后再试或联系管理员"

}

7. 其他客户端错误的响应码,只在响应消息体中提供相应提示。

示例:

Response Code

401 Unauthorized

Response Body

{

  "message": "用户未登录"

}

----------------------------------------------------------

Response Code

403 Forbidden

Response Body

{

  "message": "权限不足"

}

----------------------------------------------------------

Response Code

404 Not Found

Response Body

{

  "message": "请求资源不存在或已被删除"

}

常见响应码

响应码 说明
 200 OK  请求已成功
 201 Created  资源已创建
 204 No Content  请求已成功,但无返回内容
 304 Not Modified  缓存有效
 400 Bad Request  语义有误,当前请求无法被服务器理解,请求参数错误
 401 Unauthorized  当前请求需要用户认证(登录)
 403 Forbidden  用户已认证(登录),但权限不足
 404 Not Found  请求源未在服务器上被发现
 405 Method Not Allowed  请求方法不能被用于请求相应的资源,如使用PUT方法访问只接受POST方法的API
 500 Internal Server Error  服务端内部错误
 502 Bad Gateway  网关错误
 504 Gateway Timeout  网关超时

RESTful规范建议的更多相关文章

  1. restful 规范(建议)

    需求:开发cmdb,对用户进行管理. 做前后端分离,后端写api(URL),对用户表进行增删改查,应该写四个URL(还要给文档(返回值,返回,请求成功,干嘛,失败,干嘛)),然后分别写视图函数. ht ...

  2. RESTful 规范

    RESTful 规范 前言 rest 是一种软件架构风格,如果使用的是 rest 接口,那么就可以说你的接口是 restful. rest接口是围绕''资源''展开的,利用 HTTP 的协议,其实 r ...

  3. DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等

    DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...

  4. Django restful 规范

    一.REST Frame Work REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为"表征状态转移&q ...

  5. django rest framework restful 规范

    内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...

  6. day89 DjangoRsetFramework学习---restful规范,解析器组件,Postman等

     DjangoRsetFramework学习---restful规范,解析器组件,Postman等           本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析 ...

  7. 18.DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等

    一 预备知识 预备知识:django的CBV和FBV CBV(class based view):多用,简单回顾一下 FBV(function based view): CBV模式的简单操作:来个登陆 ...

  8. day 87 DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等

    DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等   本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组 ...

  9. 01 drf源码剖析之restful规范

    01 restful规范 目录 01 restful规范 1. 什么是restful规范 2.restful规范详细 1. 什么是restful规范 restful是一套规则,是程序间进行数据传输的一 ...

随机推荐

  1. RabbitMQ消息队列(六):使用主题进行消息分发

    在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因, ...

  2. pig函数以及关键字 的一些实例应用的总结(来自pig笔记)

    http://wenku.baidu.com/link?url=yb7KnpSj9nHxWk_MsEVUezvB24evRf9wR87FX0dTT77pGXNXi6k3o_kTmAkBrpIHTqo6 ...

  3. Java 8新特性探究(五)Base64详解

    BASE64 编码是一种常用的字符编码,在很多地方都会用到.但base64不是安全领域下的加密解密算法.能起到安全作用的效果很差,而且很容易破解,他核心作用应该是传输数据的正确性,有些网关或系统只能使 ...

  4. Chapter 1 Securing Your Server and Network(12):保护链接服务器

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38438363,专题目录:http://blog.csdn.net/dba_huangzj ...

  5. 安装mysql到服务器的linux环境下

    1·安装mysql 命令:yum -y install httpd php mysql mysql-server 2·配置mysql 配置开机启动服务 /sbin/chkconfig --add my ...

  6. leetcode 生成杨辉三角形, 118 119 Pascal's Triangle 1,2

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Retu ...

  7. JAVA之旅(十三)——线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this

    JAVA之旅(十三)--线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this 我们继续上个篇幅接着讲线程的知识点 一.线程的安全性 当我们开启四个窗口(线程 ...

  8. android官方技术文档翻译——Android Lint

    本文译自androd官方技术文档<Android Lint>,原文地址:http://tools.android.com/tips/lint. 本文地址:http://blog.csdn. ...

  9. android universal image loader 缓冲原理详解

    1. 功能介绍 1.1 Android Universal Image Loader Android Universal Image Loader 是一个强大的.可高度定制的图片缓存,本文简称为UIL ...

  10. (四十九)Quartz2D自定义控件

    利用Quartz2D来自定义UIImageView: 模仿UIImageView: 设置frame,设置图片. 注意一个细节,自定义的imageView,应该通过重写set方法来设置图片并且重绘,否则 ...