【笔记向】RESTful api
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列表)
其他参考文章
【笔记向】RESTful api的更多相关文章
- Flask 学习笔记(二):RESTful API
概括 URL:需要操作的对象,也就是资源 HTTP method:我要对该对象做什么(POST 增.DELETE 删.GET 查.PUT 和 PATCH 改) HTTP status code:操作的 ...
- Flask RESTful API搭建笔记
之前半年时间,来到项目的时候,已经有一些东西,大致就是IIS+MYSQL+PHP. 所以接着做,修修补补,Android/iOS与服务器数据库交换用PHP, Web那边则是JS+PHP,也没有前后端之 ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
- Java框架spring Boot学习笔记(九):一个简单的RESTful API
RESTful API设计需求如下: User.java package com.springboot.test; public class User { private Long id; priva ...
- RESTful API实战笔记(接口设计及Java后端实现)
写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
- Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档
1.添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!--swagger2--> <dependency> <groupId>io.spr ...
- 【Tech】CAS RESTful API使用笔记
在被maven,cas,tomcat各种贱人就是矫情的虐了好几天之后,终于跑通了demo,哈哈哈哈哈哈哈~ 在这里详细记录一下,给和我一样连maven都不会的小白一点福利,同时欢迎大神指正. 首先上最 ...
- 深入理解 RESTful Api 架构
转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api 就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...
- RESTful API的重磅好伙伴Swagger2
本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档. 它既可以减少我们创建文 ...
- Spring MVC中使用 Swagger2 构建Restful API
1.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <contex ...
随机推荐
- ES的java端API操作
首先简单介绍下写这篇博文的背景,最近负责的一个聚合型的新项目要大量使用ES的检索功能,之前对es的了解还只是纯理论最多加个基于postman的索引创建操作,所以这次我得了解在java端如何编码实现:网 ...
- 2022-11-14 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...
- 2022-11-13 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...
- C++快速幂
C++快速幂 快速幂的作用: 当我们做一些高次幂的计算时,就不能直接进行暴力的计算.例如:需要计算2^n 并且n≤10^18.这时候如果我们直接进行暴力的计算,时间复杂度为O ( n ),那么肯定会超 ...
- (Java)设计模式:行为型
前言 此篇博文内容续接的是 UML建模语言.设计原则.创建型设计模式 的内容,有兴趣的可以点前面的链接去看一下 3.2.行为型 这类设计模式是专门用于:对象间的高效沟通和职责委派 * 3.2.1.责任 ...
- 【Shell案例】【awk每行执行一次】11、转置文件的内容
描述写一个 bash脚本来转置文本文件nowcoder.txt中的文件内容. 为了简单起见,你可以假设:你可以假设每行列数相同,并且每个字段由空格分隔 示例:假设 nowcoder.txt 内容如下: ...
- Nginx rewrite 详解
Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关 ...
- LeetCode HOT 100:在排序数组中查找元素的第一个和最后一个位置
题目:34. 在排序数组中查找元素的第一个和最后一个位置 题目描述: 给你一个递增数组,和一个目标值target,最终返回数组中第一次出现target和最后一次出现target的下标.如果该数组中没有 ...
- ClickHouse入门教程
目录 什么是ClickHouse? OLAP场景的关键特征 列式数据库更适合OLAP场景的原因 输入/输出 CPU ClickHouse的特性 真正的列式数据库管理系统 数据压缩 数据的磁盘存储 多核 ...
- Jmeter 之 switch 控制器
switch 控制器作用: switch 控制器起到了分流作用,具体应用在并发时,一部分用户执行某个场景,一部分用户执行另外一种场景,就像吞吐量控制器进行分流操作 switch 控制器字段介绍: 实例 ...