API Testing 8 - 介绍REST & REST API_api setics-程序员宅基地

技术标签: rest  restful  软件测试  api  接口测试  # API Testing 入门系列  

API Testing 入门基础系列 之 API Testing 8 - 介绍REST & REST API

什么是REST?

REST(Representational State Transfer)表述性状态传递. 它是一种架构风格,定义一系列约束条件来创建web服务或则API。Web服务采用REST的风格设计和实现被称为REST API或RESTFul API或则Web services。这些web services提供互联网计算机系统之间的互通性。符合REST风格的Web services允许请求系统通过一系列统一的,预先定义的无状态操作来访问和操作Web 资源表述。

它是Roy Fielding博士在2000年他的博士论文中提出来的,它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

Wikipedia 中定义REST如下:
设计良好的网络应用表现为一系列的网页,这些网页可以看作的虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展现给使用的人,而这正代表了状态的转变。通过使用无状态协议HTTP和标准操作,REST系统目的就是为了更快的性能,可靠性和扩展性。即使系统正在运行,通过重用组件可达到管理和更新系统,不会影响整个系统。

REST 6个准则:

REST提供6个指导原则或则是约束,如果一个API被称为RESTFull API,那它必须满足这些约束。

客户端-服务器结构(Client–server architecture)
连接协议具有无状态性(Statelessness)
能够利用Cache机制增进性能(Cacheability)
统一接口(Uniform interface)
层次化的系统(Layered system)
随需代码 - Javascript (可选)(Code on demand)

客户端-服务器架构(Client–server architecture):
将客户端与服务器分开, 这种关注点分离意味着,例如,客户端不关心数据存储,数据存储仍然是每个服务器的内部,从而提高了客户端代码的可移植性。 服务器不关心用户界面或用户状态,因此服务器可以更简单,更具可伸缩性。 只要不改变接口,服务器和客户端也可以独立替换和开发。

无状态(Statelessness):
在客户-服务器架构中,服务端不会保存客户端请求之间的任何信息。每个从客户端发给服务端的请求必须包含所有必要的信息,以此服务端才能理解并做出正确的响应。不管是同一个客户端对同一个资源发出多次请求,每一次请求都是独立的,必须包含所有必要的信息。

可缓存(Cacheable):
我们知道服务端基于客户端的请求会返回响应。这个响应可以被缓存以帮助后续相关请求重复使用数据。适当的利用部分或则全部的缓存可以减少客户端与服务器端的交互。更进一步提高性能和可扩展性。一个REST API应该鼓励设计成存储缓存数据。

统一接口:
统一接口约束 定义了客户端和服务端之间的接口,它简化和结构了架构,使每个部件都能独立发展。对某一部件进行改变,不会影响其它部件。4个接口约束:

1.资源标识(identification of resources):
使用uri作为资源标识符,在请求中标识各个资源。
资源本身在概念上 与返回给客户端的表示分开,
举例: 服务器不发送其数据库,而是发送一些表示某些数据库记录的 HTML, XML或 JSON

2.通过表述操控资源(manipulation of resources through representations)
在客户端具有足够的权限,并且当客户端持有资源的 表示时, 它有足够的信息来修改和删除服务器上的资源。
资源的定义: 比如服务器上的数据库资源
表示的定义: 返回给客户端的数据库几行记录
简单来说:客户端可以操控服务器上的资源。

3. 自我描述信息(self-descriptive messages)
每条消息都有足够的信息来描述如何处理消息,说的就是:

http request:
start line
headers
body

http response:
status line
headers
body

总结起来就是: headers 包含足够信息: 包括 cacheability, media type 等

4. hypermedia 作为应用状态引擎(hypermedia as the engine of application state)
什么是 hypermedia: 也被成为 hyperlinks (hyperlinks存在于 hypertext中)
具体就是:
客户端通过请求body内容,query-string参数,请求Headers和请求的URI(资源标识符)传递状态。服务器端通过响应body内容,响应码及响应Headers传递状态给客户端。

层次化系统:
在客户-服务器架构中,我们通常认为是2层,但实际上在请求和响应之间,有多层职责。客户端通常无法判断它是直接连接到终端服务器,还是沿途的中介。 中间服务器可以通过启用负载平衡和提供共享缓存来提高系统可伸缩性。 layers也可以实施安全策略。

随需代码:
这个是可选约束,服务器能够通过向客户端传输可以执行的逻辑来临时扩展或自定义客户端的功能。 这样的示例可以包括编译的组件,例如Java applet和客户端脚本,例如JavaScript。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wumingxiaoyao/article/details/117623788

智能推荐

tableau:甘特图_甘特图 延期怎么样表示-程序员宅基地

文章浏览阅读1.2k次。案例:绘制交货延迟天数甘特图step1:把‘计划交货日期’拖到‘列’把‘供应商名称’和‘物资类别’拖到‘行’step2:把‘计划交货日期’改成‘天’,注意:选择的是第二个‘天’!!!改了之后就变成这个样子:step3:在‘度量’那里的空白处点击右键,选择‘创建计算字段’,然后创建一个‘延迟天数’的新字段,创建好之后点‘应用’、‘确定’。step4:把‘延迟天数’拖到‘大小’那里,之后就是这个样子图中蓝色长条的长度就反映了延迟天数的长短,但是有一个问题,有些商品是提前交货的,提_甘特图 延期怎么样表示

[提权] 使用 ShellCode 注入其他进程_shellcode 注入进程 执行-程序员宅基地

文章浏览阅读936次。背景如果将shellcode注入到具有特定权限的进程中,使用 ShellCode 创建的进程就可以获得与该进程相同的权限。本次使用的工具,依旧是上次编写的PETools:https://www.cnblogs.com/LyShark/p/12960816.html提权降权工具下载地址:https://www.blib.cn/soft/pexec.zip枚举系统进程,与进程权限令牌等。#include <stdio.h>#include <Windows.h>#inc_shellcode 注入进程 执行

超好用的几款可视化管理工具,你有吗?_服务器可视化管理工具x-程序员宅基地

文章浏览阅读1.2k次。1. 命令行不知道大家在日常操作redis时用什么可视化工具呢?以前总觉得没有什么太好的可视化工具,于是问了一个业内朋友。对方回:你还用可视化工具?直接命令行呀,redis提供了这么多命令,操作起来行云流水。用可视化工具觉得很low。命令行的鄙视用工具的,用高端工具的鄙视低端工具的,鄙视链一直存在。虽然用命令行自己也可以,但是总感觉效率上不如用工具,在视觉上不那么直观。尤其是看json的时候,在命令行就很不友好。大佬朋友说:谁说命令行就不能格式化json了?可以利用iredis,用|将redis..._服务器可视化管理工具x

百度地图集成_地图sensorm接口-程序员宅基地

文章浏览阅读331次。1.链接:http://lbsyun.baidu.com/index.php?title=androidsdk2.申请密钥:1.获取应用sha1:keytool -v -list -keystore keystore.jks,进入存在keystore的对应路径下并将文件名替换3.如果地图空白并且提示:AndroidManifest.xml的application中没有meta-_地图sensorm接口

CentOS6.8合并DVD1和DVD2作为本地yum源_centos6.8 yum 配置本地光盘源视频-程序员宅基地

文章浏览阅读882次。CentOS6.8合并DVD1和DVD2 下载链接:https://pan.baidu.com/s/1kti8zLbsiB45O6iBkrZ8CA 密码:7z1gCentOS一般都会提供DVD1和DVD2两个镜像文件,形如CentOS-6.8-x86_64-bin-DVD1.iso和CentOS-6.8-x86_64-bin-DVD2.iso,使用DVD1即可安装使用CentOS系统了,DVD..._centos6.8 yum 配置本地光盘源视频

MySQL——数据库调优整体策略_mysql数据库调优-程序员宅基地

文章浏览阅读3.8k次,点赞6次,收藏57次。文章目录MySQL——数据库调优整体策略1、数据库调优1.1、调优的目标1.2、确定调优的目标1.3、调优的维度和步骤2、MySQL服务器的优化2.1、优化服务器硬件2.2、优化MySQL服务的参数3、优化数据库结构3.1、拆分表:数据冷热分离3.2、增加中间表3.3、增加冗余字段3.4、优化数据类型3.5、优化插入记录的速度3.6、使用非空约束3.7、分析表3.8、检查表3.9、优化表4、大表优化4.1、限定查询范围4.2、读写分离4.3、垂直拆分4.4、水平拆分5、其它调优策略5.1、服务器语句超时处理_mysql数据库调优

随便推点

IBM AIX 5.3 系统管理 -- 磁盘存储管理二_gvg-012-程序员宅基地

文章浏览阅读7k次。 在安装操作系统时,缺省情况下会创建一个名为 rootvg 的卷组。使用一个或多个还未分配到其他卷组并且处于可用状态的物理卷,可以在系统上创建额外的卷组。所有物理卷都将划分为具有相同大小的物理分区。在创建卷组以后,物理分区的大小就不可更改。 IBM AIX 5.3 系统管理 -- 磁盘存储管理一 http://blog.csdn.net/tianlesoftware/archive/2011/0_gvg-012

排列数_1+c(n,2)+c(n,4)等于2的幂-程序员宅基地

文章浏览阅读1.5k次。do{}while(next_permutation(a+1,a+n+1));//a[]数组一定要是已经从小到大排序好的,才能遍历全排列排列组合常用公式:(1)证明 0!=1;(2)证明 C(n,m)=C(n,n-m);(3)证明 C(n+1,m)=C(n,m)+C(n,m-1);(4)证明 C(n,r)+C(n,r+1)=C(n+1,r+1);(5)证明 C(n,0..._1+c(n,2)+c(n,4)等于2的幂

mac下charles的基本配置_mac charles记录设置怎么填-程序员宅基地

文章浏览阅读695次。1、下载安装Charles,  2、安装好之后,、  3、打开菜单栏,选择“Proxy”,勾选“Starting Recording”和“Mac OS X Proxy”。  其中“Starting Recording”表示开始进行记录网络请求。  “Mac OS X Proxy”表示将系统代理设置通过此“Proxy”。  4、此时打开系统偏好设置,查看网络偏好设置。  点击高级,切换到“代理”,可..._mac charles记录设置怎么填

Java研发知识图谱_java用ltp提取文本关系并创建知识图谱-程序员宅基地

文章浏览阅读751次。不同行业不同公司不同岗位所用到的技术千差万别,所以该图谱不具有普适性。 该图谱基于笔者从业(电子商务/互联网金融后端)以来工作经验画出,具有一定的局限性,不过对于互联网行业Java研发知识体系具有一定的代表性。 该图谱目前只画出大概框架,各分支还有待完善及补充,后期也会不断更新。 ..._java用ltp提取文本关系并创建知识图谱

java中的多线程_class producer implements runnable{ int count=0; p-程序员宅基地

文章浏览阅读479次。在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。对于直接继承Thread的类来说,代码大致框架是:class 类名 extends Thread{方法1;方法2;…public void run(){// other code…}属性1;属性2;… }先看一个简单的例子:/** * @aut_class producer implements runnable{ int count=0; public void run(){ while(co

K8s(14)——kubernetes之kubernetes资源限制(CPU,内存,namespace限制)_kubernetes resource cpu limit-程序员宅基地

文章浏览阅读510次。文章目录1、内存限制2、CPU限制1、内存限制2、CPU限制_kubernetes resource cpu limit

推荐文章

热门文章

相关标签