什么是Restful?

Rest简介

  1. REST是英文representational state transfer(表象性状态转变)或者表述性状态转移。
  2. Rest是web服务的一种架构风格。
  3. 使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议。
  4. 轻量级,跨平台,跨语言的架构设计。
  5. 它是一种设计风格,不是一种标准,是一种思想。

Rest架构的主要原则

  1. 网络上的所有事物都被抽象为资源
  2. 每个资源都有一个唯一的资源标识符
  3. 同一个资源具有多种表现形式(xml,json等)
  4. 对资源的各种操作不会改变资源标识符
  5. 所有的操作都是无状态的
  6. 符合REST原则的架构方式即可称为RESTful

什么是Restful

  1. 对应的中文是rest式的
  2. Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务
  3. rest式的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构)

为什么会出现Restful

在Restful之前的操作

  1. http://127.0.0.1/user/query GET 根据用户id查询用户数据
  2. http://127.0.0.1/user/save POST 新增用户
  3. http://127.0.0.1/user/update POST 修改用户信息
  4. http://127.0.0.1/user/delete GET/POST 删除用户信息

Restful用法

  1. http://127.0.0.1/user/1 GET 根据用户id查询用户数据
  2. http://127.0.0.1/user  POST 新增用户
  3. http://127.0.0.1/user  PUT 修改用户信息
  4. http://127.0.0.1/user  DELETE 删除用户信息

常用的HTTP动词有下面五个(括号里是对应的SQL命令)

  1. GET(SELECT):从服务器取出资源(一项或多项)。
  2. POST(CREATE):在服务器新建一个资源。
  3. PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
  4. PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
  5. DELETE(DELETE):从服务器删除资源。

如何使用

http方法资源操作幂等安全
GETSELECT
POSTINSERT
PUTUPDATE
DELETEDELETE

幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。
安全性:对该REST接口访问,不会使服务器端资源的状态发生改变。

##6.SpringMVC原生态的支持了REST风格的架构设计
###所涉及的注解

  1. @RequestMapping
  2. @PathVariable
  3. @ResponseBody
package cn.itcast.mybatis.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import cn.itcast.mybatis.pojo.User;
import cn.itcast.mybatis.service.NewUserService;@RequestMapping("restful/user")
@Controller
public class RestUserController {@Autowiredprivate NewUserService newUserService;/*** 根据用户id查询用户数据* * @param id* @return*/@RequestMapping(value = "{id}", method = RequestMethod.GET)@ResponseBodypublic ResponseEntity<User> queryUserById(@PathVariable("id") Long id) {try {User user = this.newUserService.queryUserById(id);if (null == user) {// 资源不存在,响应404return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);}// 200// return ResponseEntity.status(HttpStatus.OK).body(user);return ResponseEntity.ok(user);} catch (Exception e) {e.printStackTrace();}// 500return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);}/*** 新增用户* * @param user* @return*/@RequestMapping(method = RequestMethod.POST)public ResponseEntity<Void> saveUser(User user) {try {this.newUserService.saveUser(user);return ResponseEntity.status(HttpStatus.CREATED).build();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}// 500return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);}/*** 更新用户资源* * @param user* @return*/@RequestMapping(method = RequestMethod.PUT)public ResponseEntity<Void> updateUser(User user) {try {this.newUserService.updateUser(user);return ResponseEntity.status(HttpStatus.NO_CONTENT).build();} catch (Exception e) {e.printStackTrace();}// 500return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);}/*** 删除用户资源* * @param user* @return*/@RequestMapping(method = RequestMethod.DELETE)public ResponseEntity<Void> deleteUser(@RequestParam(value = "id", defaultValue = "0") Long id) {try {if (id.intValue() == 0) {// 请求参数有误return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();}this.newUserService.deleteUserById(id);// 204return ResponseEntity.status(HttpStatus.NO_CONTENT).build();} catch (Exception e) {e.printStackTrace();}// 500return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);}
}

##7.HTTP相应状态码

codeHTTP operationBody ContentsDescription
200GET,PUT资源操作成功
201POST资源,元数据对象创建成功
202POST,PUT,DELETE,PATCHN/A请求已经被接受
204GETN/A操作已经执行成功,但是没有返回数据
301GETlink资源已被移除
303GETlink重定向
304GETN/A资源没有被修改
400GET,POST,PUT,DELETE,PATCH错误提示(消息)参数列表错误(缺少,格式不匹配)
401GET,POST,PUT,DELETE,PATCH错误提示(消息)未授权
403GET,POST,PUT,DELETE,PATCH错误提示(消息)访问受限,授权过期
404GET,POST,PUT,DELETE,PATCH错误提示(消息)资源,服务未找到
405GET,POST,PUT,DELETE,PATCH错误提示(消息)不允许的http方法
409GET,POST,PUT,DELETE,PATCH错误提示(消息)资源冲突,或者资源被锁定
415GET,POST,PUT,DELETE,PATCH错误提示(消息)不支持的数据(媒体)类型
429GET,POST,PUT,DELETE,PATCH错误提示(消息)请求过多被限制
500GET,POST,PUT,DELETE,PATCH错误提示(消息)系统内部错误
501GET,POST,PUT,DELETE,PATCH错误提示(消息)接口未实现

原文地址:https://blog.csdn.net/chenxiaochan/article/details/73716617

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

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

相关文章

java程序定时器

目录 1.java定时器原生方法 1.java定时器原生方法 实现每天早上8点执行任务的示例代码 import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit;public class TimeTest{pub…

汽车网络安全--关于UN R155认证的思考

1.UN R155概述 2020年6月25日,联合国颁布了全球首个汽车网络安全强制性法规 -- UN 155,详细规定了关于评估网络安全措施的审核条款、制造商和供应商降低网络安全风险的方法以及实施风险评估的义务等。 法规适用于与信息安全相关的M类(4轮及以上载客汽车)、N类(四轮载货汽车)…

SpringBoot项目连接Graylog

直接用logback将控制台输出的日志发送到graylog上 1.导入logback依赖 <dependency> <groupId>de.siegmar</groupId> <artifactId>logback-gelf</artifactId> <version>1.1.0</version> </dependency> 2.创建logback-spring.x…

浅谈低代码

低代码开发是近年来迅速崛起的软件开发方法&#xff0c;让编写应用程序变得更快、更简单。有人说它是美味的膳食&#xff0c;让开发过程高效而满足&#xff0c;但也有人质疑它是垃圾食品&#xff0c;缺乏定制性与深度。你认为低代码到底是美以下方向仅供参考。味的膳食还是垃圾…

SpringBoot - 四种常见定时器

常见实现方案 Scheduled注解&#xff1a;基于注解Timer().schedule创建任务&#xff1a;基于封装类Timer线程&#xff1a;使用线程直接执行任务即可&#xff0c;可以与thread、线程池、ScheduleTask等配合使用quartz配置定时器&#xff1a;基于spring的quartz框架 Scheduled注…

golang学习笔记——编写最简单的命令行工具

编写最简单的命令行工具 用户输入bufio 使用go语言编写最简单的命令行工具 mkdir hello-cli-demo cd hello-cli-demo # 查看环境变量 go envgo mod初始化 go mod init gitcode.com/m打开vscode&#xff0c;创建main.go package mainimport ("fmt""bufio&qu…

RK3568 CIF和ISP的关联

1. 引言 在本文档中&#xff0c;我们将介绍RK3568芯片的CIF&#xff08;Camera Interface&#xff09;和ISP&#xff08;Image Signal Processor&#xff09;模块。这两个模块是RK3568芯片的关键组成部分&#xff0c;用于图像采集和处理。 CIF是一个标准接口&#xff0c;用于…

快速测试 3节点的redis sentinel集群宕机2个节点以后是否仍能正常使用

有同事问我&#xff0c;三个redis sentinel节点&#xff0c;宕机两个节点以后&#xff0c;是否还能够正常的通过redis sentinel正常访问redis的数据。我想了想&#xff0c;理论上是可以的&#xff0c;但是我没试过&#xff0c;今天有时间就测试了一下。搭建环境和测试代码的过程…

Java并发(十七)----变量的线程安全分析

1、成员变量和静态变量是否线程安全 如果它们没有共享&#xff0c;则线程安全 如果它们被共享了&#xff0c;根据它们的状态是否能够改变&#xff0c;又分两种情况 如果只有读操作&#xff0c;则线程安全 如果有读写操作&#xff0c;则这段代码是临界区&#xff0c;需要考虑线…

深入了解Python pydash库

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在数据处理和分析领域&#xff0c;Python一直是一种强大的编程语言。然而&#xff0c;在处理大规模数据集和执行复杂操作时&#xff0c;有时候需要更高效的工具。在本文中&#xff0c;我们将深入探讨pydash库&am…

语义分割 简介及数据集简介

参考文章 MS COCO数据集介绍以及pycocotools简单使用-CSDN博客

[MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;不要在乎别人怎么看你&#xff0c;因为他们根本就没有时间&#xff0c;他们只关心他们自己。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法 MySQL数据库 存储引擎 前言MySQL体…

代码随想录算法训练营第四十一天|343. 整数拆分、96.不同的二叉搜索树

代码随想录算法训练营第四十一天|343. 整数拆分、96.不同的二叉搜索树 整数拆分 343. 整数拆分 文章讲解&#xff1a;https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html 题目链接&#xff1a;https://leetcode.cn/problems/integer-break/ 视频讲解…

李宏毅gpt个人记录

参考&#xff1a; 李宏毅机器学习--self-supervised&#xff1a;BERT、GPT、Auto-encoder-CSDN博客 用无标注资料的任务训练完模型以后&#xff0c;它本身没有什么用&#xff0c;GPT 1只能够把一句话补完&#xff0c;可以把 Self-Supervised Learning 的 Model做微微的调整&am…

32.768KHz时钟RTC晶振精度PPM值及频差计算

一个数字电路就像一所城市的交通&#xff0c;晶振的作用就是十字路口的信号灯&#xff0c;因此晶振的品质及其电路应用尤其关键。数字电路又像生命体&#xff0c;它的运行就像人身体里的血液流通&#xff0c;它不是由单一的某个器件或器件单元构成&#xff0c;而是由多个器件及…

【Spring Boot 源码学习】ApplicationListener 详解

Spring Boot 源码学习系列 ApplicationListener 详解 引言往期内容主要内容1. 初识 ApplicationListener2. 加载 ApplicationListener3. 响应应用程序事件 总结 引言 书接前文《初识 SpringApplication》&#xff0c;我们从 Spring Boot 的启动类 SpringApplication 上入手&am…

如何查询川菜食材配料的API接口

在当今的美食文化中&#xff0c;菜谱不只是一张简单的食谱&#xff0c;更是了解美食文化和饮食知识的重要途径。然而&#xff0c;若没有准确的食材配料&#xff0c;烹制出的每道菜品都将难以达到完美的味道。因此&#xff0c;为了更好地满足人们对于菜谱和食谱的需求&#xff0…

C语言习题集(026)

//写一个函数&#xff0c;输入一个4位数字&#xff0c;要求输出这4个 //数字字符&#xff0c;但每两个数字间空一个空格。如输入 //1990&#xff0c;应输出"1 9 9 0"。 /* */ //解答&#xff1a; #include<stdio.h> void change(int a) { if(a/10!0) { chang…

linux权限管理以及shell

1.shell 1.1什么是shell? shell即外壳&#xff0c;是运行在linux系统上的一个脚本语言&#xff0c;包裹在linux内核的外面。我们常说的linux操作系统实际上是linux内核。我们使用的所有指令都是一个个程序&#xff0c;而shell指令就是一个将我们用户的操作翻译给linux内核的程…

软件设计之组合模式

组合模式&#xff1a;将对象组合成树形结构。 案例&#xff1a;公司管理。一个公司可以分总公司和分公司&#xff0c;无论是总公司还是分公司都有自己的部门&#xff0c;如人力资源管理部门、财务部门。分公司可以建立自己在不同地域的办事处。请使用组合模式打印出某个公司的…