rest风格使用两个变量_为什么要用Rest风格,接口应该怎么定义,除了Rest还可用什么方式写接口的?...

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

深度思考中的知识点——为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?

1.背景介绍

REST(Representational State Transfer)指的是一种架构设计风格,而满足这种设计风格的应用程序或设计就被认为是RESTful架构风格。

这也是目前互联网中最流行的一种软件架构风格,它结构清晰、符合标准、易于理解,越来越多的应用服务开始使用RESTful这种架构风格,尤其是那些基于HTTP协议的网络服务。

而常常提及的rest的web服务,是rest作为在web领域的一种实现方式

2.知识剖析

所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。

它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。

要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

表现层(Representation)

"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。

URI只代表资源的实体,不代表它的形式。

严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。

它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

状态转化(State Transfer)

访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。

互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。

客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。

它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

Rest风格总结

1. REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口);

2. Server提供的RESTful API中,URL中只使用名词来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心,表示一个网络实体,代表一个资源;它对应唯一的一个资源,是资源的地址。

3. 用HTTP协议里的动词来实现资源的添加,修改,删除等操作。

4. Server和Client之间传递某资源的一个表现形式

5. 用 HTTP Status Code传递Server的状态信息。

3.常见问题

1.@pathvariable @requestparam共同点

答:用于从request中接收请求的,两个都可以接收参数

2@pathvariable @requestparam区别

答: RequestParam  汉语意思就是: 请求参数 顾名思义 就是获取参数的

PathVariable 汉语意思是:路径变量,顾名思义,就是要获取一个url 地址中的一部分值

4.编码实战

5.扩展思考

什么是幂等操作?幂等性为什么重要?

等幂性(Idempotence)

, 等幂性简单点说就是一次请求和多次请求,资源的状态是一样。

比如GET和HEAD,不论你请求多少次,资源还是在那里。

请注意,DELETE和PUT也是等幂的,以为对同一个资源删除一次或者多次,结果是一样的,就是资源被删除了,不存在了。

为什么说PUT也是等幂的?当你PUT一个新资源的时候,资源被创建,再次PUT这个URI的时候,资源还是没变。

当你PUT一个存在的资源时,更新了资源,再次PUT的时候,还是更新成这个样子。

在PUT更新的时候,不能做相对的更新(依赖资源现在的状态),比如每次对一个数加1,这样资源状态就会变化。

应该每次更新成某个数,比如把某个数变成4,则无论多少次PUT,值都是4,这样就是等幂了。

我们设计Restful WS的时候,GET,HEAD, PUT, DELETE一定要设计成等幂的。

由于网络是不可靠的,安全性和等幂性就显得特别重要。

如果一次请求,服务器收到处理以后,客户端没有收到相应,客户端会再次请求,如果没有等幂性保障,就会发生意想不到的问题。

POST是不安全也不等幂的,还是拿weblog的例子,如果两次POST相同的博文,则会产生两个资源,URI可能是这样/weblogs/myweblog/entries/1和/weblogs/myweblog/entries/2,尽管他们的内容是一摸一样的。

6.参考文献

https://blog.csdn.net/xinjianwuhen1991/article/details/50095021

http://www.ruanyifeng.com/blog/2011/09/restful.html

7.更多讨论

1,为什么要用RESTful结构呢?

答:近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。

有了RESTful结构,不管是电脑端还是手机端,或者是APP,按照REST的接口来进行数据交互,完全不用关心后端实现,也就是说,前端和后端真正的实现了完全的分离设计。

2.在使用rest之前,是怎么写接口的

答:URL该怎么写就怎么写,但是没有PUT,GET,POST,DELETE方法

3.1. 重定向和转发的区别?

答:redirect和forward。重定向可以带数据过去,转发不能。转发是服务器行为,重定向是客户端行为。

分享到此结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Smobiler 4.4 更新预告 Part 1(Smobiler能让你在Visual Studio上开发APP)

在4.4版本中,大家对产品优化的一些建议和意见进行了相应的优化和修复,同时,还新增了一些令人激动的功能和插件。 下面先为大家介绍4.4版本中Smobiler的优化和修复: 优化 1, PageView的AutoPlay默认属性改为True。 2&am…

cad lisp 二次抛物线_学习CAD的五个段位,你是青铜还是王者?

大家学习AutoCAD多久了,从入门到精(fang)通(qi),小编总结了5个段位,大家对号入座。此时视口内的三维实体并没有任何变化,需要后续使用soldraw才能进行转换。SOLVIEW创建的视口经过SOLDRAW处理后,会生成表示实体轮廓和边…

Python 基础知识(二)

一、基础数据类型 1、数字int 数字主要是用于计算用的,使用方法并不是很多,就记住一种就可以: #bit_length() 当十进制用二进制表示时,最少使用的位数 # -*- coding:UTF-8 -*- v 11 data v.bit_length() print(data) # 二进制&a…

深入理解JavaWeb(五)——过滤器和监听器

深入理解JavaWeb(五)——过滤器和监听器 摘要:在基于Java-Web核心技术的开发应用中,为了一些特定的用途或目的,那么Filter和Listener就要闪亮登场了。在本文中我们来聊一聊Servlet规范中的另俩技术的核心知识点&#x…

G - 娜娜梦游仙境系列——梦醒

G - 娜娜梦游仙境系列——梦醒 Time Limit:2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Special JudgeProblem Description 娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的…

DB2 常用操作命令集合

1、 打开命令行窗口 #db2cmd 2、 打开控制中心 # db2cmd db2cc 3、 打开命令编辑器 db2cmd db2ce 操作数据库命令 4、 启动数据库实例 #db2start 5、 停止数据库实例 #db2stop 如果你不能停止数据库由于激活的连接,在运行db2stop前执行db2 force applica…

vue-resource跨域问题

如果是cli 就在config/index.js配置proxyTable proxyTable: {/login: {target: http://192.168.0.240:8888,changeOrigin: true,pathRewrite: {^/login:}}}, 转载于:https://www.cnblogs.com/GuGuT3T/p/8807923.html

ps一点等于多少厘米_劝告大家:女人40岁后,体重多少算正常?太瘦也不好

阅读本文前,请您先点击上面的“蓝色字体”,再点击“关注”,这样您就可以继续免费收到文章了。每天都有分享,完全是免费订阅,请放心关注。由于身高、骨骼、体型和体重的不同,与男性相比,女性将相…

【GitLab】CentOS安装GitLab最佳实践

环境 [rootiZ2851te7e5Z ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.1.1503 (Core) Release: 7.1.1503 Codename: Core服务器安装了 PHP7Nginx,占用80端口Mysql安装 安装采用官…

java xml转map_java练习本(原每日一练)(20190514)

名人名言昨日翻译“The No. 1 reason people fail in life is because they listen to their friends, family, and neighbors.”——Napoleon Hill“人们生活中失败的第一个原因是他们听取朋友、家人和邻居的意见。”——拿破仑希尔今日名言“Your time is limited, so don’t…

查找单链表中间节点

解决方案: 设立两个指针,一个单步走,一个两步走,当大步指针到达链表尾部的时候,小步指针也正好位于链表中间位置。 转载于:https://www.cnblogs.com/hj-blog/p/4430844.html

? SegmentFault Hackathon 文艺复兴上海站作品集 - 获奖篇

承上回,在 Day 1 中,石墨文档、Agora.io 声网和 HPE 的技术团队针对自家的 SDK、API 等作了深度介绍,今天就来看看我们的开发者是如何将作品和服务关联起来的吧。 跳蚤市场 24 小时的编程,艺术家都将什么作品搬上自己的摊位&#…

Solidity 官方文档中文版 2_Ethereum 智能合约介绍

一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节。 Storage contract SimpleStorage {uint storedData;function set(uint x) {storedData x;}function get() constant returns (uint retVal)…

华为手机云闪付付款码如何截图_云闪付乘车码,它带着优惠又来了

云闪付乘车码又来了!想必这段时间大家有些(甚是)想念薅羊毛的日子想起那快乐时光嘴角总是不经意的偷偷乐不多说了,直接上优惠特别提醒:1分钱乘公交5折乘地铁......详戳▼▼▼银联信用卡1分钱乘公交活动时间:2019年12月6日—2019年…

读《构建之法》1-5章

《构建之法》第一至五章,我了解了软件工程的重要性,它就像楼房的建设,是一项大工程,必须有设计,步骤,工具,有能力,有计划,还要有团队合作才有可能实现这么一个工程。 第一…

ChemDraw教程:如何查看和删除俗名

化学范畴里,允许用俗名表示ChemDraw原子标记或原子标记的一部分,可以定义俗名的快捷键也可以自由查看或删除俗名,熟练掌握可以提高ChemDraw软件使用效率,下面将具体介绍此部分内容。 一、查看俗名 查看已定义俗名的方法有两种&…

850是什么意思_850是什么意思

1. 850的近义词1. The United Nations says more than eight hundred fifty million people do not have enough food.联合国公布了有超过850,000,000的人食不果腹。2. danci.911cha.com2. The results show that the TiO_2 thin films are composed of …

[HNOI2012]矿场搭建

题解&#xff1a; 首先显然这是要缩点的 缩点双 直接对割点之间的联通块判断一下连着几个割点 连0个 cnt*&#xff08;cnt-1&#xff09;/2 连1个 cnt 连2个 0 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define ll long long #define N 2000 bool …

地图与定位之定位

今天开始总结一下地图与定位。首先要使用定位就要引用框架CoreLocation.framework,在类文件中加入#import <CoreLocation/CoreLocation.h>,其次在IOS8中调用的时候要在Info.plist中加两个Key,NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription,具体…

merge into ORA-30926

ORA-30926: 无法在源表中获得一组稳定的行 同时要求在一张表中添加一个字段&#xff0c;由于数据量较大&#xff0c;想使用merge into update的方式将数据 meger into xxx1 t1 using(select * from xxx2 )t2 on(t1.xmt2.xm and t1.dzt2.dz) when matched then update set tra…