精华内容
下载资源
问答
  • 这里是修真院前端小课堂,每篇分享文从 ...REST的请求方法有哪些,有什么区别?】 1.背景介绍 restFul是符合rest架构风格网络API接口,完全承认Http是用于标识资源。restFul URL是面向资源,可以唯...

    这里是修真院前端小课堂,每篇分享文从

    【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

    八个方面深度解析前端知识/技能,本篇分享的是:

    【什么是RESTFUL?REST的请求方法有哪些,有什么区别?】

    1.背景介绍
    restFul是符合rest架构风格的网络API接口,完全承认Http是用于标识资源。restFul URL是面向资源的,可以唯一标识和定位资源。 对于该URL标识的资源做何种操作是由Http方法决定的。 rest请求方法有4种,包括get,post,put,delete.分别对应获取资源,添加资源,更新资源及删除资源.

    2.知识剖析
    如何编写符合rest架构风格的restful?

    1.URL中不可出现动词

    2.URL能够唯一地标识单个或一类资源

    3.通过Http动词去操作URL标识的资源(get(获取),pst(添加),put(更新),delete(删除))

    错误写法示例

    clipboard.png

    错误写法

    该网络API接口URL中使用了动词,并没有做到只标识和定位资源

    正确写法示例

    clipboard.png

    正确写法

    该网络API接口URL仅标识和定位资源,通过Http方法Post表明是一个添加资源的处理器

    REST请求方法解析

    GET

    get方法在Rest中主要用于获取资源,能够发送参数,不过有限制,且参数都会以?开头的形 式附加在URL尾部

    clipboard.png

    get参数

    因为参数信息会完全暴露,因此是不推荐发送重要信息的。get方法产生一个tcp数据报一次发送完毕。

    规范的get方法处理器应该是幂等的,也就是说对一个资源不论发送多少次get请求都不会更改数据或造成破坏。

    应该在编写处理器的时候保证幂等从而提高安全性

    POST

    post方法在Rest请求中主要用于添加资源,参数信息存放在请求报文的消息体中相对安全,且可发送较大信息

    post因为参数信息存在方消息体中相对安全,一般用于发送重要数据,且post产生两个tcp数据报需要发送两次完成

    对于get和post的本质区别该博客写的非常好

    规范化的post方法处理器是不幂等的,因此如果用户重复对一个资源进行post应该在处理器中做出限制和处理保证对数据不造成破坏和更改 从而提高安全性.get和post本质区别

    PUT

    put方法在Rest中主要用于更新资源,因为大多数浏览器不支持put和delete,会自动将put和delete请求转化为get和post. 因此为了使用put和delete方法,需要以post发送请求,在表单中使用隐藏域发送真正的请求。

    put方法的参数是同post一样是存放在消息中的,同样具有安全性,可发送较大信息。

    put方法是幂等的,对同一URL资源做出的同一数据的任意次put请求其对数据的改变都是一致的。比如更新/student/2的name值为bobdylan

    不论提交该请求多少次,/student/2资源的name值会于提交一次请求无异

    DELETE

    Delete在Rest请求中主要用于删除资源,因为大多数浏览器不支持put和delete,会自动将put和delete请求转化为get和post.因此为了使用put和delete方法,需要以post发送请求,在表单中使用隐藏域发送真正的请求。

    Delete方法的参数同post一样存放在消息体中,具有安全性,可发送较大信息 Delete方法是幂等的,不论对同一个资源进行多少次delete请求都不会破坏数据

    3.常见问题
    浏览器自动转化PUT和DELETE为GET和POST,容器找不到对应的处理器报错

    rest风格规定URL标识资源,使用Http的四个方法对资源进行操作。但在浏览器发送请求时会自动将put和post 转化为get和post.这样rest风格就成了鸡肋,且发送请求会报错说找不到get方法或post方法。

    为什么不支持delete和put方法是因为html4官方在表单中仅支持get和post方法,忽略了Put和Delete以及其他Http方法. 尽管在html5和一些新的浏览器支持所有的http方法,但不可能所有用户都使用最新的浏览器。

    4.解决方案
    1.首先第一种是前端人员通过ajax发送,因为不懂前端所以不详述

    2.通过在form表单中使用隐藏域在服务器端配置过滤器来发送真实请求

    3.使用Spring的sf:form表单来提交

    第一种就不详述了

    第二种在编码实战中进行演示

    第三种方法因为资料不全,是在Spring实战这本书中看到的,自己尝试实现失败了。见Spring实战这本书305页

    展开全文
  • 幂等性最早是数学里面一个概念,后来被用于计算机领域,用于表示任意多次请求均与一次请求执行结果相同,也就是说对于一个接口而言,无论调用了多少次,最终得到结果都是一样 比如以下代码 public class ...

    幂等性最早是数学里面的一个概念,后来被用于计算机领域,用于表示任意多次请求均与一次请求执行的结果相同,也就是说对于一个接口而言,无论调用了多少次,最终得到的结果都是一样的

    比如以下代码

    public class IdempotentExample {
        // 变量
        private static int count = 0;
        /**
         * 非幂等性方法
         */
        public static void addCount() {
            count++;
        }
        /**
         * 幂等性方法
         */
        public static void printCount() {
            System.out.println(count);
        }
    }

    对于变量 count 来说,如果重复调用 addCount() 方法的话,会一直累加 count 的值,因为 addCount() 方法就是非幂等性方法;而 printCount() 方法只是用来打印控制台信息的。因此,它无论调用多少次结果都是一样的,所以它是幂等性方法

    幂等性的实现方案通常分为以下几类

    • 前端拦截

    • 使用数据库实现幂等性

    • 使用 JVM 锁实现幂等性

    • 使用分布式锁实现幂等性

    • 前端拦截

    前端拦截是指通过 Web 站点的页面进行请求拦截,比如在用户点击完“提交”按钮后,我们可以把按钮设置为不可用或者隐藏状态,避免用户重复点击

    核心的实现代码如下

    <script>
        function subCli(){
            // 按钮设置为不可用
            document.getElementById("btn_sub").disabled="disabled";
            document.getElementById("dv1").innerText = "按钮被点击了~";
        }
    </script>
    <body style="margin-top: 100px;margin-left: 100px;">
        <input id="btn_sub" type="button"  value=" 提 交 "  onclick="subCli()">
        <div id="dv1" style="margin-top: 80px;"></div>
    </body>
    

    但前端拦截有一个致命的问题,如果是懂行的程序员或者黑客可以直接绕过页面的 JS 执行,直接模拟请求后端的接口,这样的话,我们前端的这些拦截就不能生效了。因此除了前端拦截一部分正常的误操作之外,后端的验证必不可少

    • 数据库实现

    数据库实现幂等性的方案有三个

    • 通过悲观锁来实现幂等性

    • 通过唯一索引来实现幂等性

    • 通过乐观锁来实现幂等性

    • JVM 锁实现

    JVM 锁实现是指通过 JVM 提供的内置锁如 Lock 或者是 synchronized 来实现幂等性。使用 JVM 锁来实现幂等性的一般流程为:首先通过 Lock 对代码段进行加锁操作,然后再判断此订单是否已经被处理过,如果未处理则开启事务执行订单处理,处理完成之后提交事务并释放锁,执行流程如下图所示:

    JVM 锁存在的最大问题在于,它只能应用于单机环境,因为 Lock 本身为单机锁,所以它就不适应于分布式多机环境

    • 分布式锁实现

    分布式锁实现幂等性的逻辑是,在每次执行方法之前先判断是否可以获取到分布式锁,如果可以,则表示为第一次执行方法,否则直接舍弃请求即可,执行流程如下图所示:

    需要注意的是分布式锁的 key 必须为业务的唯一标识,我们通常使用 Redis 或者 ZooKeeper 来实现分布式锁;如果使用 Redis 的话,则用 set 命令来创建和获取分布式锁,执行示例如下:

    127.0.0.1:6379> set lock true ex 30 nx
    OK # 创建锁成功
    

    ex 是用来设置超时时间的;而 nx 是 not exists 的意思,用来判断键是否存在。如果返回的结果为“OK”,则表示创建锁成功,否则表示重复请求,应该舍弃

    展开全文
  • 面对接口测试应该怎么做,常见的接口测试工具有哪些常规操作,本文将做简单梳理总结,欢迎大家批评指正。 一、接口测试 接口测试指的就是对服务器的接口功能进行测试。服务器的接口功能就是根据收到值的情况返回...

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


    前言

    面对接口测试应该怎么做,常见的接口测试工具有哪些常规操作,本文将做简单梳理总结,欢迎大家批评指正。


    一、接口测试

    接口测试指的就是对服务器的接口功能进行测试。服务器的接口功能就是根据收到值的情况返回对应的结果。

    那么我们需要做的就是使用一个工具,将我们设定好的参数,以一种方式,传递这个请求到指定的接口。之后根据接口响应的状况,判断接口时候工作正常。一个接口往往会根据不同的值有不同的响应内容。

    设定好参数,例如key value(键值对)。一个请求也能包含多个key value。
    传递方式:get或者post,这两种传递方式决定了参数放在什么位置传送
    指定接口:可能会用到ip地址,URL(Uniform Resource Locator,统一资源定位器)以及端口号。

    接口响应:状态码以及返回的数据

    二、Postman的常用操作

    测试单一接口的时候可以使用postman,postman是在谷歌上以插件集成的简单小工具

    用Postman测试时,根据请求发送方式不同有两种情况:

    • 当请求以get发送时,我们需要在params中以key value形式添加参数,也可以直接在路径后面添加参数;
    • 当请求以post发送时,我们需要在body的x-www-form-urlencoded中以key value形式添加参数;

    之后点击send发送请求进行接口测试,返回结果显示在下方reponse文本框中。我们可以根据返回结果判断接口是否正确。根据对应的接口文档,进行正反用例数据的填写。

    多个接口一起测试时,左侧collections栏目新建接口集合,然后在save中选择save as,之后runner该集合,开始运行。根据结果的红色和绿色来区分,同时能看见响应时间和响应码。

    三、Python的常用操作

    1.回归测试

    我们使用python中的第三方包requests来完成。可以将接口的信息,编写到Python文件中,包括每个接口的URL、参数、请求方式、参数的key value。

    通过for循环可以测试多个接口。

    根据不同的请求方式,使用request.get(接口的路径,接口的参数(字典形式))或request.post(接口的路径,data=参数(字典形式))。

    之后执行该python文件,得到的参数会在控制台显示出来,包括返回的状态码以及josn形式的参数。然后生成一个测试报告。

    python编译器可以使用pycharm,这个编译器功能强大,在排版和纠错方面能起到很大的帮助。同时也能直接通过pycharm来安装requests包。

    import requests
    

    四、Jmeter

    1.测试执行

    创建一个线程组
    选择sampler
    选择http请求
    在http请求中填写服务器ip地址,服务器端口号以及要访问的url路径。
    当接口以get请求时,地址栏下的parameters中填写key value;当接口以post请求时,在地址栏下的bodydata中以
    key1=value1&key2=value2&key3=value3&的形式传递参数。
    若接口含有中文,需要设置content encoding的属性值为utf-8.

    2.结果分析

    根据请求的颜色,绿色为成功,红色为失败。

    若进行性能测试,需要扩展插件增加jmeter监听器,因为jmeter自带的监听器只有3个(图形结果、查看结果数、聚合报告),我们还需要扩展插件添加每秒事务数、每秒点击量、每秒响应时间、硬件变化、吞吐量这些监听器。

    通过图形结果偏离数可以得到该系统性能是否稳定,通过样本数目可以看到请求是否都已经完成,聚合报告如系统比较稳定,可以看中值数查看请求时间是否超过3秒,不稳定可以查看90% line的时间,这里也能看到最大请求时间和最小请求时间,可以对超时的请求进行优化。根据Error%的情况决定是否需要优化。还能分析吞吐量随着点击量的提升减少的关系。还能查看到服务器的CPU、硬盘、网络等具体情况。


    总结

    以上就是接口测试大略,本文仅仅简单介绍了接口测试的常规操作,欢迎大家批评指正。

    展开全文
  • 常见的接口调用方式三种(设计接口的时候要考虑选用哪种接口) 1、http接口:http是一种网络传输协议,基于TCP。(等价于:http+json) 现在浏览器客户端与服务器端通信基本都是采用http协议。 SpringCloud框架,...

    常见的接口调用方式有三种(设计接口的时候要考虑选用哪种接口)

    1、http接口:http是一种网络传输协议,基于TCP。(等价于:http+json)
    现在浏览器客户端与服务器端通信基本都是采用http协议。
    SpringCloud框架,各个服务间也是通过http方式来实现的。
    http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串。
    http有几个特点:
    (1)规定了数据格式
    (2)对服务没有任何技术限定,自由灵活,更符合为服务理念。
    (3)现在热门的REST风格 / RESTful 风格,就可通过Http协议来实现。

    请求方式:post/get/put/delete 等。
    传输的数据格式(一般而言):JSON

    2、rpc接口:远程过程调用(类似的还有RMI),基于TCP。
    自定义数据式,基于原生TCP通信,速度快,效率高。
    现在热门的dubbo框架,就是RPC的典型代表。
    rpc有几个特点:
    (1)数据的格式可以自定义(一般是XML)。
    (2)速度快,效率高。
    (3)现在比较热门的dubbo就是RPC的典型代表。

    传输的数据格式:XML

    3、webservice接口:Webservice是系统对外的接口。(等价于:http+xml)
    webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的。
    webService接口提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者,比如天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统跨平台的。就是通过一个servlet,提供服务出去。

    首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class) 这个代理类负责与WebService服务器进行Request 和Response 当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解 析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。这就是WebService的一个运行过程。

    webservice大体上分为5个层次:

    1. Http传输信道
    2. XML的数据格式
    3. SOAP封装格式
    4. WSDL的描述方式
    5. UDDI UDDI是一种目录服务,企业可以使用它对Webservices进行注册和搜索

    应用协议是SOAP(简单对象访问协议)
    传输的数据格式:XML

    4、总结1(接口的选择)
    现在很多第三方接口,都改成了基于http,直接传递json数据的方式来代替webservice。
    但是webservice接口能传输数据量比较大的数据,而且可以跟语言无关,也可以跟操作系统无关。
    在某些业务复杂,稳定性和正确性要求高的领域(如ERP、电商、支付),WebService还有是用武之地的。

    5、总结2(传输数据格式的选择)
    为什么JSON比XML流行
    还是易用性,JSON的可读性比XML强,解析规则也简单许多。
    XML 解析的时候规则太多了,动不动就非法字符,动不动就抛异常。这对追求高开发速度和低开发门槛的企业来说,是个致命伤。

    JSON的缺点是数据类型支持较少,且不精确。比方说:

    {"price":12580}
    

    在json里,你无法知道这个价格是int, float还是double。

    所以,如上面第二条所述,在一些业务要求较高的领域,还是XML更合适。

    最后说一下性能, JSON 的性能高于XML,除此之外,基于 XML 和 HTTP 的 WebService , 基于 JSON 的RESTful API ,并没有性能差异。

    6、学习链接
    链接1:点我
    链接2:点我
    链接3:点我

    展开全文
  • 1.Python常见的数据类型有哪些? int、str、 float、list、bool、tuple、dict、set json本质上还是字符串,只是按key:value这种键值对的格式来的字符串 2. 下个接口请求参数依赖上个接口的返回数据 不同的接口封装...
  • 接口有哪些类型? 接口的分类:1.webservice接口 2.http api接口 webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式,我们在测试时候都用通过工具才能进行调用,测试。 http api接口是...
  • 在搭建接口自动化测试框架之前,首先我们要清楚什么接口接口的常见请求方式有哪些接口由哪些部分组长? 什么是接口? 官方说法:由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互...
  • 一、接口测试第一篇

    2018-11-10 11:33:00
    1.请求行:请求地址,请求方法常见的有get和post 2.消息头:content-type content-length 3.请求正文:请求参数 三、GET和POST请求的特点 1.GET请求:  请求参数放在地址上面,已?打头,参数是键值对存在,...
  • 1.请求行:请求地址,请求方法常见的有get和post 2.消息头:content-type content-length 3.请求正文:请求参数 三、GET和POST请求的特点 1.GET请求: 请求参数放在地址上面,已?打头,参数是键值对存在,多个...
  • 前端接口请求数据是再熟悉不过了,但是有些时候网络问题,或者其他问题导致的失败请求还是很常见的!有些是真的失败需要retry,有些是成功,成功之后再告诉你需要retry, 接下来我来分享下我做项目里面自己手写了一个 ...
  • JAVAEE常见问题分析

    2019-09-27 16:52:18
    Servlet接口有哪些方法及Servlet生命周期探秘 get和post请求的区别 什么情况下调用doGet()和doPost() 转发(Forward)和重定向(Redirect)区别 自动刷新(Refresh) Servlet与线程安全 JSP和Servlet是什么关系 ...
  • 78.常见的异常类有哪些? 八、网络 79.http 响应码 301 和 302 代表的是什么?有什么区别? 80.forward 和 redirect 的区别? 81.简述 tcp 和 udp的区别? 82.tcp 为什么要三次握手,两次不行吗?为什么? 83.说一下...
  • 一.Servlet中常见方法介绍Servlet是一个接口,我们先来看一看这个接口有哪些方法。 还记得不记得Servlet运行流程,WEB容器启动时候会调用init()方法,宕机时候会调用destroy()方法,在有一个请求到来时候...
  •  Collection是集合类的上级接口,继承与他的接口主要Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符...
  • 问题4-27:在因特网中最常见的分组长度大约是多少个字节? 问题4-28:IP数据报的最大长度是多少个字节? 问题4-29:IP数据报的首部的最大长度是多少个字节?典型的IP数据报首部是多长? 问题4-30:IP数据报在传输的...
  • 网络知识

    2021-06-03 17:39:55
    二、常见的http接口请求方法有哪些? 比较常用的http接口请求方法: 1.get请求:主要用来获取资源和数据 2.post请求:用来发送数据给服务器,也可以创建或者是更新资源 3.put请求:可以用来创建或者是替换目标资源 4...
  • 1、HTTP里面常见的请求方法有哪些? http1.0定义了三种: GET: 向服务器获取资源,比如常见的查询请求 POST: 向服务器提交数据而发送的请求 Head: 和get类似,返回的响应中没有具体的内容,用于获取报头 ...
  • 22、面向对象特征有哪些方面 15 23、java中实现多态机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 ...
  • 1、面向对象特征有哪些方面 (1). 封装: 封装是把过程和数据包围起来,对数据访问只能通过已定义界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装对象,这些对象通过一个...
  • 问题3-14:能否归纳一下连续ARQ协议都有哪些主要功能和特别要注意地方? 问题3-15:在许多有关网络技术书籍或文献中,经常会看到“应答”、“回答”、“响应”和“确认”等术语。这些术语意思都一样吗? 问题3...
  • java面试宝典

    2013-02-28 16:04:01
    41、Java 的接口和C++的虚类的相同和不同处。 12 42、一个“.java”源文件中是否可以包含多个类(不是内部类)?什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    41、Java 的接口和C++的虚类的相同和不同处。 12 42、一个“.java”源文件中是否可以包含多个类(不是内部类)?什么限制? 12 43、说出一些常用的类,包,接口,请各举5 个。 12 44、Anonymous Inner Class (匿名...
  • java 面试题 总结

    2009-09-16 08:45:34
    1、面向对象特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关那些方面,以便更充分地注意与当前目标有关方面。抽象并不打算了解全部问题,而只是选择其中一部分,暂时不用部分细节。抽象包括...
  • 常见的攻击有哪些? SQL注入,XSS,CSRF(和表单重复提交是一个类型) 最基本的WEB安全防范:密码设为英文+数字+特殊符号,访问白名单 表单重复提交 表单重复提交十分常见,如果什么防范都不做的话,那肯定是不好的 ...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

常见的接口请求方法有哪些