RESTful api 是什么

源自论文:点我中文版

Representational state transfer:

Representational:数据表现形式

state:状态

transfer:数据传输

REST精髓:6个限制

1.Client-Server

关注点分离

服务端专注数据存储,提高简单性

前端专注用户界面,提高可移植性

2.无状态

所有用户会话信息保存在客户端

每次请求必须包括所有信息,不能依赖上下文信息

服务端不用保存会话信息,提高了简单性,可靠性,可见性

(如果后端存用户会话信息,从故障中恢复几乎不可能)

(可见性:所有的信息是传参过去的,而不是隐藏的状态,所有的信息都可以控制)

3.缓存

所有服务端响应,都要被标记为可缓存和不可缓存(静态文件可以缓存)

缓存减少前后端交互,提高性能

4.统一接口

统一接口突出了 REST 的特点

接口设计尽可能统一,提升了简单性,可见性

所有的接口遵循同一个规范,所以交互的可见性高(看到接口就知道是干嘛的)

5.分层系统

每层只知道相邻的层

比如加了一层代理,阿里有中间件系统,比如安全层,负载均衡,缓存层

6.按需代码(非必选)

客户端可以下载运行服务端传来的代码

简化客户端,提升客户端简单性

统一接口的主要内容

资源的标识

资源是可以命名的事物,评论、用户(都是名词)

每个资源可以被 uri 唯一的标识

通过表述来操作资源

客户端不能直接操作资源,只能通过 representation (就是json、xml)

自描述信息

每个消息(请求响应)必须提供足够的信息

例如媒体类型,http方法

是否缓存

超媒体作为应用状态引擎

超媒体的含义就是,api(即url)里面不仅仅存数据,而是一个超媒体用来代表下一个动作(即应用状态),例如

{
// 非超媒体
nsid:'18345671234@bzzb'
}
{
// 超媒体
nsid:"http://api.fl.com/services/rest/?method=flickr.people.getInfo?auth_key=xxxx&user_id=18345671234@bzzb"
}

RESTful API 简介

1.基础的uri

2.标准http请求(get post patch delete 等)

3.媒体类型,json xml

举例 github repos api

其中增加删除修改都很常规,但是有个转移api,transfer,他是这样设计的(注意REST中限制了uri只能用名词,但是http自带的那些动词无法完全描述api的行为时,就可以像GitHub这样)

POST /repos/{owner}/{repo}/transfer

设计请求规范

URI 使用名词,尽量用复数,如 /users

使用嵌套来标识关联关系,如 /user12/repos/5

使用正确的http方法:get/post/put/delete

不符合的情况:POST + 动词/actioin(uri的查询字符串中指明)/子资源

响应设计规范

查询,每个响应都可以被查询(被过滤)

分页,(本质也是查询)

过滤字段,(只返回指定的字段)

状态码

错误处理

安全

https

鉴权(基础鉴权,OAuth鉴权)

限流(请求头里有字段)

开发者友好

文档

超媒体(像导航一行的url列表)

其他参考文章

全文对web的发展有很清晰的阐述

超媒体

最新文章

  1. WPF 自定义列表筛选 自定义TreeView模板 自定义ListBox模板
  2. LeakCanary中英文文档+使用例子
  3. freemarker空值的多种处理方法
  4. hdu 5062
  5. OpenSuse如何共享目录
  6. VS上的WebService入门贴
  7. Cocos移植Android-Android.mk编译后的文件
  8. oracle一视图性能问题
  9. hibernate子查询
  10. Python Django 2.2登录功能_2
  11. MySQL, XE7使用FireDAC连接MySQL数据库
  12. Selenium切换窗口,警告框处理,调用JavaScript代码
  13. sql语句表连接删除
  14. Java并发编程相关知识整理
  15. 查看MySQL版本的命令及常用命令
  16. 一套oracle的练习题
  17. 【原创】<Debug> not positioned on a valid record
  18. html5 canvas 画图移动端出现锯齿毛边的解决方法
  19. mysql分页查询语句怎么写?
  20. IPMB接口协议总结

热门文章

  1. el-select实现下拉框触底加载更多
  2. 轻松玩转sed
  3. .net6+wpf制作指定局域网ip无法上网的arp欺诈工具
  4. Day37:正则表达式详解
  5. python基础re模块与正则
  6. java中加号的用法
  7. Redis基本操作(2)
  8. conan环境安装
  9. RSA中用到的推导,笔记持续更新
  10. vlc qt player 播放器开发实例