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的发展有很清晰的阐述

超媒体

【笔记向】RESTful api的更多相关文章

  1. Flask 学习笔记(二):RESTful API

    概括 URL:需要操作的对象,也就是资源 HTTP method:我要对该对象做什么(POST 增.DELETE 删.GET 查.PUT 和 PATCH 改) HTTP status code:操作的 ...

  2. Flask RESTful API搭建笔记

    之前半年时间,来到项目的时候,已经有一些东西,大致就是IIS+MYSQL+PHP. 所以接着做,修修补补,Android/iOS与服务器数据库交换用PHP, Web那边则是JS+PHP,也没有前后端之 ...

  3. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

  4. Java框架spring Boot学习笔记(九):一个简单的RESTful API

    RESTful API设计需求如下: User.java package com.springboot.test; public class User { private Long id; priva ...

  5. RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

  6. Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档

    1.添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <!--swagger2--> <dependency> <groupId>io.spr ...

  7. 【Tech】CAS RESTful API使用笔记

    在被maven,cas,tomcat各种贱人就是矫情的虐了好几天之后,终于跑通了demo,哈哈哈哈哈哈哈~ 在这里详细记录一下,给和我一样连maven都不会的小白一点福利,同时欢迎大神指正. 首先上最 ...

  8. 深入理解 RESTful Api 架构

    转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api  就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...

  9. RESTful API的重磅好伙伴Swagger2

    本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档. 它既可以减少我们创建文 ...

  10. Spring MVC中使用 Swagger2 构建Restful API

    1.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <contex ...

随机推荐

  1. Java安全之动态加载字节码

    Java字节码 简单说,Java字节码就是.class后缀的文件,里面存放Java虚拟机执行的指令. 由于Java是一门跨平台的编译型语言,所以可以适用于不同平台,不同CPU的计算机,开发者只需要将自 ...

  2. selenium被某些网页检测不允许正常访问、登录等,解决办法

    网站通过什么方式检测 function b() { return "$cdc_asdjflasutopfhvcZLmcfl_"in u || d.webdriver } 通过上方的 ...

  3. OSI传输层TCP与UDP协议、应用层简介、socket模块介绍及代码优化、半连接池的概念

    目录 传输层之TCP与UDP协议 应用层 socket模块 socket基本使用 代码优化 半连接池的概念 传输层之TCP与UDP协议 TCP与UDP都是用来规定通信方式的 通信的时候可以随心所欲的聊 ...

  4. (GCC) C++代码中使用#pragma GCC optimize / #pragma G++ optimize

    科学计算用优化 经过实验证明这个命令优化效果最好,把我的 1.2S 的 FFT 优化到了 0.4S使用 pragma 命令优化程序: #pragma GCC optimize("Ofast, ...

  5. linux系统移植

    1 linux环境搭建 1.1 添加交叉开发工具链 新建如下工程目录: gcc-4.6.4.tar.xz #拷贝 tar -Jxvf gcc-4.6.4.tar.xz #解压 cd ./gcc-4.6 ...

  6. 6. PyQt5 中的多线程的使用(上)

    专栏地址 ʅ(‾◡◝)ʃ 这一节引入了多线程这个非常重要概念, 在我认为多线程的重要性是紧紧次于信号与槽函数的, 因为在平时经常使用 1. 为什么要用多线程 先看下面这一个示例代码 6.1 from ...

  7. FCOS论文复现:通用物体检测算法

    摘要:本案例代码是FCOS论文复现的体验案例,此模型为FCOS论文中所提出算法在ModelArts + PyTorch框架下的实现.本代码支持FCOS + ResNet-101在MS-COCO数据集上 ...

  8. 【kafka】JDBC source&sink connect实现数据从Oracle实时同步插入更新到PostgreSQL(PG)

    〇.所需资料 1.JDBC connect的plugins下载地址(confluent) 一.Oracle建表 1.表规划 表名:Test_TimeFormat_Order.Test_Stress_O ...

  9. 【Shell案例】【awk map计数&sort按指定列排序】9、统计每个单词出现的个数

    描述写一个 bash脚本以统计一个文本文件 nowcoder.txt 中每个单词出现的个数. 为了简单起见,你可以假设:nowcoder.txt只包括小写字母和空格.每个单词只由小写字母组成.单词间由 ...

  10. 【Day02】Spring Cloud组件的使用--Nacos配置中心、sentinel流量控制、服务网关Gateway、RocketMQ、服务调用链路(Sleuth、zipkin)

    今日内容 一.配置中心 1.遗留问题 yml配置,每一次都需要重启项目 需要不重启项目拿到更新的结果 引出:配置中心 选择:Spring Cloud Config组件 / Alibaba的Nacos( ...