RESTful 设计:

1.协议
通信协议:https

2.域名
部署在API专用域名下,除非API很简单(https://www.example.com/api)
https://api.example.com

3.版本
应将版本号放在url中(.../v1/...);也可以放在http头中

4.路径
不能有动词,只能有名词;所用名词常和数据库表格名对应
(ps:https://api.example.com/v1/users)

5.HTTP动词
GET(SELECT):获取一个或多个 eg: /users /users/id /users/id/hobbys
POST(CREATE):新增 eg: /users
PUT(UPDATE):更新整个对象 eg: /users/id
PATCH(UPDATE):更新部分属性 eg: /users/id
DELETE(DELETE):删除 eg: /users/id /users/id/hobbys/id

HEAD:获取元数据
OPTIONS:获取可以修改的属性

6.过滤信息(类似分页)
?limit=10 条数
?offset=10 开始位置
?page=2&per_page=100 分页
?sortby=name&order=ase 属性排序、排序规则
?name=aaa 添加筛选条件

7.常见状态码(Status Codes)
200 OK 幂等操作
201 CREATED - (post/put/patch) 用户新增或修改成功
202 Accepted - (*) 表示已进入后台排队(异步任务)
204 NO CONTENT - [delete] 删除数据成功
400 Invalid request - (post/put/patch) 请求有误,没有进行修改操作,幂等操作
401 Unauthorized - (*) 没有权限
403 Forbidden - (*) 有权限,但被禁止访问
404 Not Found - (*) 不存在的资源,幂等操作
406 Not Accepted - (get) 请求参数格式错误
410 Gone - (get) 资料被删除,且不会再得到
422 Unprocesable entity - (get/put/patch) 创建对象,发生验证错误
500 Internal server error - (*) 服务器发生错误,无法判断请求是否成功

8.错误处理
状态码为4xx,返回error信息 :{ error:"Invalid is fail"}

9.返回结果
GET: /users   返回列表      /users/id 返回单个对象
POST: /users   返回新增对象
PUT: /users/id  返回整个对象
PATCH: /users/id  返回完整对象
DELETE: /users/id  返回空文档

10.Hypermedia API
向api.example.com根目录发送请求,返回一个文档
{
"user_url":"https://api.example.com/user",
//...
}
向子目录发送请求,返回单个说明文档:
{
"documentation_url":"https://api.example.com/v1/users",
"message":"user infomation"
}

11.其它
1.api的身份认证应该使用OAuth 2.0 框架
2.数据格式尽量用JSON

RESTful 设计理论的更多相关文章

  1. 游戏UI框架设计(一) : 架构设计理论篇

    游戏UI框架设计(一) ---架构设计理论篇 前几天(2017年2月)看到一篇文章,国内王健林.马云等大咖们看好的未来十大最有"钱途"产业中,排名第一的就是"泛娱乐&qu ...

  2. 企业SOA架构设计理论

    SOA简介 SOA(Service-Oriented Architecture,面向服务架构)是一种将信息系统模块化为服务的架构风格.拥有了服务之后,我们就可以迅速地将这些服务按不同方式重新组合,从而 ...

  3. Restful设计思想

    1.REST的架构设计 代表性状态传输(Representational State Transfer,REST)在Web领域已经得到了广泛的接受,是基于SOAP和Web服务描述语言(Web Serv ...

  4. [RESTful] 设计要素

    如何设计RESTful API 资源路径(入何规划资源路径) HTTP动词(请求方式 GET/POST...) 过滤信息(分页,查询操作的时候进行信息过滤) 状态码(服务器端响应什么样的状态码) 错误 ...

  5. django RESTful设计方法

    1. 域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下. https://example.org ...

  6. RESTful设计方法

    REST REST,即Representational State Transfer的缩写.维基百科称其为“具象状态传输”,国内大部分人理解为“表现层状态转化”. RESTful是一种开发理念.维基百 ...

  7. .NET 微服务 2 架构设计理论(一)

    SOA体系架构 面向服务的体系结构 (SOA) ,通过将应用程序分解为多个服务(通常为 HTTP 服务,WCF服务等),将其分为不同类型(例如子系统或层),从而来划分应用程序的结构. 微服务源自 SO ...

  8. php Restful设计

    1.restful是基于资源的,面向资源架构风格(一个链接,一张图.一个文本等等) 2.restful的http协议 2.1 url: 2.1.1 port 服务端口,默认为80 2.1.2 path ...

  9. restful设计参考

    https://www.cnblogs.com/pyspark/p/8599210.html 以下查阅多处文档,思考总结: 所谓restful规范代表一种理想状态,首先对此种规范表示赞同,但应不忘实事 ...

随机推荐

  1. [K/3Cloud]DBServiceHelper.ExecuteDataSet(this.Context, sql)) 返回数据问题

    例如下面代码: int sQty = 0; string sql = string.Format(@" Select FMATERIALID ,FBASEUNITID ,FAUXPROPID ...

  2. CentOS6网络设置(桥接模式)&Xshell连接虚拟机-

    CentOS无法上网,且Xshell无法连接到虚拟机问题: 目的:在桥接模式下,CentOS能上网,且Xshell能够连接到虚拟机.解决办法:https://www.youtube.com/watch ...

  3. 临时起异,要进入C++领域耍一个程序

    没办法.两周之内可以搞定吧. 就一个SESSION 0的问题. 网上有类似源码,调一下应该就可以吧..保佑顺利. 基本语法都还记得,快N年啦... #include <iostream> ...

  4. FreeMarker与Servlet结合示例

    一.最原始示例 1.引入POM依赖 <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --> <de ...

  5. RESTFUL 和SOA初探

    这篇文章是转载的,restful简单的说就是url明确的指向资源.soa还不好用自己的话解释,但明显不是这样,好吧,我自己的理解就是soa就是访问网站的一个接口.以访问一个blog list为例子,  ...

  6. iOS xmpp协议实现聊天之openfire的服务端配置(二)

    本篇主要说一下怎样利用命令行来正确配置MySql. 首先打开终端: 1.为mysql起一个别名 alias mysql=/usr/local/mysql/bin/mysql 2.创建mysql的管理员 ...

  7. TCP/IP具体解释学习笔记--TCP的坚持和保活定时器

    TCP的坚持定时器 1.基本概念 TCP的接收方指名希望从发送方接收的数据字节(窗体大小)来进行流量控制,假设窗体大小为0.那么放送方就会阻止发送数据,直到接收方发来一个已跟新窗体大小的ACK为止,那 ...

  8. iOS截取视频某一帧图片(关键帧,AVAssetImageGenerator)

    获取第一帧图片 导入 AVFoundation.Framework.CoreMedia.Framework 实现代码例如以下: + (UIImage*) thumbnailImageForVideo: ...

  9. ViewPager中View的复用

    代码例如以下: public class MyViewPagerAdapter extends PagerAdapter { //显示的数据 private List<DataBean> ...

  10. Android 录制屏幕的实现方法

    Android 录制屏幕的实现方法 Chrome   2017-02-15 15:32:01 发布 您的评价:       5.0   收藏     0收藏 长久以来,我一直希望能够直接从Androi ...