热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

初学SpringBootch06接口架构风格RESTful

ch06-接口架构风格RESTful1.1认识RESTful1.1.1RESTful架构风格1.2RESTful注解1.3RESTful风格的使用1.3.1加入Maven依赖1.3


ch06-接口架构风格 RESTful

  • 1.1 认识 RESTful
    • 1.1.1 RESTful架构风格
  • 1.2 RESTful 注解
  • 1.3 RESTful 风格的使用
    • 1.3.1 加入Maven依赖
    • 1.3.2 修改 application.properties 文件
    • 1.3.3 编写Controller
    • 1.3.4 查询测试
    • 1.3.5 添加测试
    • 1.3.6 修改测试
    • 1.3.7 删除测试
  • 1.4 RESTful 优点
  • 1.5 RESTful 总结
    • 1.5.1 请求路径冲突
    • 1.5.2 注意事项

接口: API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。

接口(API): 可以指访问 servlet, controller 的 url, 调用其他程序的 函数

架构风格: api组织方式
就是一个传统的:

http://localhost:9002/mytrans/addStudent?name=lisi&age=26

在地址上提供了 访问的资源名称addStudent, 在其后使用了get方式传递参数。


1.1 认识 RESTful


1.1.1 RESTful架构风格

REST :(英文:Representational State Transfer , 中文:表现层状态转移)。
REST:是一种接口的架构风格和设计的理念,不是标准。
优点: 更简洁,更有层次

表现层状态转移: 表现层就是视图层, 显示资源的, 通过视图页面,jsp等等显示操作资源的结果。
状态: 资源变化
转移: 资源可以变化的。 资源能创建,new状态, 资源创建后可以查询资源, 能看到资源的内容,
这个资源内容 ,可以被修改, 修改后资源 和之前的不一样。


1.2 RESTful 注解

Spring Boot 开发 RESTful 主要是几个注解实现

@PathVariable:获取 url 中的数据。
该注解是实现 RESTful 最主要的一个注解

@GetMapping:接收 get 方式的请求,等同于 @RequestMapping( method=RequestMethod.GET)。

@PostMapping :接收和处理 Post 方式的请求,等同于 @RequestMapping( method=RequestMethod.POST)。

@PutMapping:接收 put 方式的请求,可以用 PostMapping 代替,等同于 @RequestMapping( method=RequestMethod.PUT)。

@DeleteMapping:接收 delete 方式的请求,可以使用 GetMapping 代替,等同于 @RequestMapping( method=RequestMethod.DELETE)。

@RestController: 符合注解, 是@Controller 和@ResponseBody组合。
在类的上面使用@RestController , 表示当前类者的所有方法都加入了 @ResponseBody


1.3 RESTful 风格的使用


1.3.1 加入Maven依赖

<dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId><scope>testscope>dependency>dependencies>

1.3.2 修改 application.properties 文件

server.port&#61;9001
server.servlet.context-path&#61;/

1.3.3 编写Controller

package co.suyv.controller;import org.springframework.web.bind.annotation.*;&#64;RestController
public class MyRestController {/*** rest 中&#xff0c; url 要使用占位符&#xff0c;表示传递的数据。* 占位符叫做路径变量&#xff0c; 在 url 中的数据** 格式&#xff1a; 在&#64;RequestMapping 的 value 属性值中&#xff0c;使用 {自定义名称}* http://localhost:8080/myboot/student/1001/bj2009** &#64;PathVariable: 路径变量注解&#xff0c;作用是获取 url 中的路径变量的值* 属性&#xff1a; value &#xff1a; 路径变量名称* 位置&#xff1a; 在逐个接收参数中&#xff0c;在形参定义的前面** 注意&#xff1a;路径变量名和形参名一样&#xff0c; value 可以不写**/// 查询id&#61;1001的学生&#64;GetMapping("/student/{studentId}")public String queryStudent(&#64;PathVariable(value &#61; "studentId") Integer id){return "查询学生 studentId&#xff1a;" &#43; id;}// 增加学生&#64;PostMapping("/student/{name}/{age}")public String creatStudent(&#64;PathVariable("name") String name,&#64;PathVariable("age") Integer age){return "创建student&#xff1a;姓名&#xff1a;"&#43; name &#43; ",年龄&#xff1a;" &#43;age;}// 修改学生&#64;PutMapping("/student/{id}/{age}")public String modifyStudent(&#64;PathVariable Integer id,&#64;PathVariable Integer age){return "修改student&#xff1a;id&#61;"&#43; "id" &#43; ",age&#61;" &#43; age;}// 删除学生&#64;DeleteMapping("/student/{id}")public String removeStudentById(&#64;PathVariable Integer id){return "删除student&#xff1a;id&#61;" &#43; id;}
}

1.3.4 查询测试

在这里插入图片描述


1.3.5 添加测试

在这里插入图片描述


1.3.6 修改测试

在这里插入图片描述


1.3.7 删除测试

在这里插入图片描述


1.4 RESTful 优点


1.轻量&#xff0c;直接基于 http&#xff0c;不再需要任何别的诸如消息协议&#xff1a;get/post/put/delete 为 CRUD 操作
2.面向资源&#xff0c;一目了然&#xff0c;具有自解释性。
3.数据描述简单&#xff0c;一般以 xml&#xff0c;json 做数据交换。
4.无状态&#xff0c;在调用一个接口&#xff08;访问、操作资源&#xff09;的时候&#xff0c;可以不用考虑上下文&#xff0c;不用考虑当前状态&#xff0c;极大的降低了复杂度。
5. 简单、低耦合



1.5 RESTful 总结


1.5.1 请求路径冲突

&#64;GetMapping(value &#61; "/student/{studentId}/{classname}")
&#64;GetMapping(value &#61; "/student/{studentId}/{schoolname}")

这样的路径访问会失败&#xff0c; 路径有冲突。


解决&#xff1a;设计路径&#xff0c;必须唯一&#xff0c; 路径 uri 和 请求方式必须唯一。



1.5.2 注意事项


1.增 post 请求、删 delete 请求、改 put 请求、查 get 请求



2.请求路径不要出现动词 例如&#xff1a;查询订单接口
/boot/order/1021/1&#xff08;推荐&#xff09;
/boot/queryOrder/1021/1&#xff08;不推荐&#xff09;



3.分页、排序等操作&#xff0c;不需要使用斜杠传参数 例如&#xff1a;订单列表接口
/boot/orders?page&#61;1&sort&#61;desc 一般传的参数不是数据库表的字段&#xff0c;可以不采用斜杠



推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 使用cpphttplib构建HTTP服务器以处理带有查询参数的URL请求 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文深入探讨了ASP.NET Web API与RESTful架构的设计与实现。ASP.NET Web API 是一个强大的框架,能够简化HTTP服务的开发,使其能够广泛支持各种客户端设备。通过详细分析其核心原理和最佳实践,本文为开发者提供了构建高效、可扩展且易于维护的Web服务的指导。此外,还讨论了如何利用RESTful原则优化API设计,确保系统的灵活性和互操作性。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 本文深入解析了Elasticsearch写入与查询的底层机制。在数据写入过程中,首先会将数据暂存至内存缓冲区,在此阶段数据尚不可被搜索。同时,为了保证数据的持久性和可靠性,系统会将这些数据同步记录到事务日志(translog)中。当内存缓冲区接近满载时,系统会触发刷新操作,将缓冲区中的数据写入到磁盘上的段文件中,从而使其可被搜索。此外,文章还探讨了查询过程中涉及的索引分片、倒排索引等关键技术,为读者提供了全面的技术理解。 ... [详细]
  • 本文深入探讨了在Spring Boot中处理RESTful风格的表单请求的方法,包括请求参数处理、请求映射以及RESTful设计原则的应用。文章详细介绍了如何利用HTTP动词(如GET、POST、PUT、DELETE)来操作资源,并结合Spring Boot的注解(如@GetMapping、@PostMapping等)实现高效、清晰的请求处理逻辑。通过实例分析,展示了如何在实际项目中应用这些技术,提高开发效率和代码可维护性。 ... [详细]
  • REST API 时代落幕,GraphQL 持续引领未来
    尽管REST API已广泛使用多年,但在深入了解GraphQL及其解决的核心问题后,我深感其将引领未来的API设计趋势。GraphQL不仅提高了数据查询的效率,还增强了灵活性和性能,有望成为API开发的新标准。 ... [详细]
author-avatar
手机用户2502874905
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有