一、RESTful设计风格

  • REST :指的是一组架构约束条件原则
  • RESTful :满足这些约束条件和原则的应用程序或设计就是 。

REST 原则

  • 客户端和服务器之间的交互在请求之间是无状态的。
  • 从客户端到服务器的每个请求都必须包含理解请求所必需的信息
  • 如果服务器在请求之间的任何时间点重启客户端不会得到通知
  • 无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。
  • 客户端可以缓存数据以改进性能。

RESTful 特点

  • 每一个URI代表1种资源(唯一地址
  • 通过操作资源的表现形式来操作资源
  • 资源的表现形式是XML或者HTML
  • 统一资源接口,即不同资源均使用相同接口访问,且具有操作幂等性(GET、HEAD、PUT和DELETE操作,多次操作结果均一致)
  • 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
  • 客户端使用GETPOSTPUTDELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源

无状态和有状态

区别:两个来自相同发起者的请求在服务器端是否具备上下文关系

有状态请求:服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。

  • 常见应用:MSN、网络游戏等服务器。服务端维护每个连接的状态信息,服务端在接收到每个连接的发送的请求时,可以从本地存储的信息来重现上下文关系。

无状态请求:服务器端所能够处理的过程必须全部来自于请求所携带的信息,以及其他服务器端自身所保存的、并且可以被所有请求所使用的公共信息。

  • 常见应用:WEB服务器。每次HTTP请求和以前都没有啥关系,只是获取目标URI。

PS:登录的时候带上一个cookie,或身份验证标识,这种常见场景是无状态化向状态化的一个过渡,在无状态化的过程中,加入状态化的信息,维护上下文关系。

二、RESTful架构

  定义:RESTful架构是对MVC架构改进后所形成的一种架构,通过使用事先定义好的接口与不同的服务联系起来。在RESTful架构中,浏览器使用POST,DELETE,PUT和GET四种请求方式分别对指定的URL资源进行增删改查操作。因此,RESTful是通过URI实现对资源的管理及访问,具有扩展性强、结构清晰的特点。

  结构:将服务器分成前端服务器和后端服务器两部分,前端服务器为用户提供无模型的视图后端服务器为前端服务器提供接口

  调用方式:浏览器向前端服务器请求视图,通过视图中包含的AJAX函数发起接口请求获取模型。

  优:

  • 项目开发引入RESTful架构,利于团队并行开发
  • 在RESTful架构中,将多数HTTP请求转移到前端服务器上,降低服务器的负荷,使视图获取后端模型失败也能呈现。

劣:

  • RESTful架构并不适用于所有的项目,当项目比较小时无需使用RESTful架构,项目变得更加复杂。

三、URI、URL、URN

  • URI : 统一资源标识符,用来标识抽象或物理资源的字符串,通过这种方式的命名的资源可以被互联网定义和访问
  • URL : 统一资源定位符,一种定位资源的指定信息位置的字符串,可以在全球范围内唯一确定一个资源。一个标准的URL必须包括:protocol、host、port、path、parameter、anchor。
  • URN : 统一资源名称,是带有名字的因特网资源,现概念已被URI取代。

URI

结构:

  • ①访问机制
  • ②存放资源的主机名
  • ③资源自身的名称

例子:

  • https://www.cnblogs.com/riches/p/12069323.html

解析:

  • ①这个资源可以通过https协议访问
  • ②资源位于主机www.cnblogs.com上
  • ③通过/riches/p/12069323.html可以对该资源进行唯一标识(PS:这个不一定是完整的路径)

URL

结构:

  • ①协议
  • ②存放该资源的主机IP地址(有时也包括端口号)。
  • ③主机资源的具体地址,如目录和文件名等。

例子:

  • http://127.0.0.1:18083/login/pageInit

解析:

  • ①这个资源可以通过http协议访问
  • ②资源位于主机127.0.0.1:18083上
  • ③通过/login/pageInit可以访问资源

URN

结构:

无固定结构

例子:

urn:issn:1535-3613 (国际标准期刊编号)

tel:+139-000-12345

解析:

URN只命名资源但不指定如何定位资源。比如:只告诉你一个人的姓名,不告诉你这个人在哪。

三者的区别与联系

  • URI是一个相对来说更广泛的概念。
  • URI可被视为定位符(URL),名称(URN)或两者兼备。
  • URL和URI都定义了资源是什么,但URL还定义了该如何访问资源。
  • URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。
  • URN定义某事物的身份,而URL提供查找该事物的方法。
  • URN如同一个人的名称,而URL代表一个人的住址。

参考文章:

Java Web学习(八)RESTful设计的更多相关文章

  1. java web 学习八(HttpServletResponse对象2)

    一.HttpServletResponse常见应用——生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类,

  2. Java Web 学习路线

    实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...

  3. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

  5. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

  7. Java Web学习系列——Maven Web项目中集成使用Spring

    参考Java Web学习系列——创建基于Maven的Web项目一文,创建一个名为LockMIS的Maven Web项目. 添加依赖Jar包 推荐在http://mvnrepository.com/.h ...

  8. Java web 学习之旅

    java web学习之旅 来公司十天了,感觉已经慢慢地融入了这个环境中,几个学长人都很好,都是在他们帮助下,我才能比较顺利的开始了学习java web的旅途. 来这里学习的第一个阶段是做一个简单的用户 ...

  9. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  10. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

随机推荐

  1. 跟我一起学.NetCore之选项(Options)核心类型简介

    前言 .NetCore中提供的选项框架,我把其理解为配置组,主要是将服务中可供配置的项提取出来,封装成一个类型:从而服务可根据应用场景进行相关配置项的设置来满足需求,其中使用了依赖注入的形式,使得更加 ...

  2. (转载)std::enable_if 的几种用法 c++11

    今天看confluo源码中看到了std::enable_if这一个我不了解的语法,所以记录下来 转载地址:https://yixinglu.gitlab.io/enable_if.html std:: ...

  3. 保护wordpress后台登录地址

    前几天有个群友的wordpress网站被后台入侵了,吓得我赶紧看了看网站日志,密密麻麻的404,扫描我的后台登录地址.还好之前有了安全措施: 纯代码保护后台登录地址,防止爆破 //保护后台登录add_ ...

  4. Ant Design Vue使用支持v-model效验的FormModel表单遇到的一个坑

    按照官网上用法写好表单后,在a-select上绑定了change事件 <a-form-model-item label="类型" prop="config.type ...

  5. 状态压缩动态规划(状压DP)详解

    0 引子 不要999,也不要888,只要288,只要288,状压DP带回家.你买不了上当,买不了欺骗.它可以当搜索,也可以卡常数,还可以装B,方式多样,随心搭配,自由多变,一定符合你的口味! 在计算机 ...

  6. 基于Appium的UI自动化测试

    为什么需要UI自动化测试 移动端APP是一个复杂的系统,不同功能之间耦合性很强,很难仅通过单元测试保障整体功能.UI测试是移动应用开发中重要的一环,但是执行速度较慢,有很多重复工作量,为了减少这些工作 ...

  7. 性能提升40%: 腾讯 TKE 用 eBPF 绕过 conntrack 优化 K8s Service

    Kubernetes Service 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式.IPVS模式的性能最好,但依然有优化的空间 ...

  8. 沈阳做假证z

    沈阳做假证[电/薇:187ヘ1184ヘ0909同号]办各类证件-办毕业证-办离婚证,办学位证书,办硕士毕业证,办理文凭学历,办资格证,办房产证不. 这是一个简单的取最大值程序,可以用于处理 i32 数 ...

  9. 在Fragment 中拦截返回键

    代码如下: class XXXFrgmt : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ...

  10. Spring源码分析 手写简单IOC容器

    Spring的两大特性就是IOC和AOP. IOC Container,控制反转容器,通过读取配置文件或注解,将对象封装成Bean存入IOC容器待用,程序需要时再从容器中取,实现控制权由程序员向程序的 ...