zoukankan      html  css  js  c++  java
  • SpringBoot RESTful api

    一、REST简单介绍

    REST代表Representational State Transfer,是一种URI风格,是一组架构约束条件和原则。REST风格服务调用就是解析URL请求,将请求由逻辑构建处理,并将处理结果返回给前端的一种调用形式。这个风格被广泛用于微服务系统之间的交互,一般前后端分离的项目采用这种风格,而不是一种标准。总结来说rest设计规范通过URL表示接口名,HTTP请求方式来区分请求类型,同时前端根据HTTP状态响应做相应的操作

    REST 本质上是使用 URL 来访问资源种方式。众所周知,URL 就是我们平常使用的请求地址了,其中包括两部分:请求方式 与 请求路径,比较常见的请求方式是 GET 与 POST,但在 REST 中又提出了几种其它类型的请求方式,汇总起来有六种:GET、POST、PUT、DELETE、HEAD、OPTIONS。尤其是前四种,正好与CRUD(Create-Retrieve-Update-Delete,增删改查)四种操作相对应,例如,GET(查)、POST(增)、PUT(改)、DELETE(删),这正是 REST 与 CRUD 的异曲同工之妙!需要强调的是,REST 是“面向资源”的,这里提到的资源,实际上就是我们常说的领域对象,在系统设计过程中,我们经常通过领域对象来进行数据建模。

    REST 是一个“无状态”的架构模式,因为在任何时候都可以由客户端发出请求到服务端,最终返回自己想要的数据,当前请求不会受到上次请求的影响。也就是说,服务端将内部资源发布 REST 服务,客户端通过 URL 来访问这些资源,这不就是 SOA 所提倡的“面向服务”的思想吗?所以,REST 也被人们看做是一种“轻量级”的 SOA 实现技术,因此在企业级应用与互联网应用中都得到了广泛应用

    (来自https://blog.csdn.net/weixin_37539378/article/details/79956760

    二、URI介绍

    URI:统一资源定位符(Uniform Resource Locator),资源(Resource)就是网络上的一个实体,或者说是网络上的一个具体信息,每一个资源类和其资源实体都可以用一个URI地址来唯一标识,比如https://cnblogs.com标识博客资源类,https://cnblogs.com/p/2478932.html表示一个唯一的博客资源实体,它的资源类是cnblogs.com,资源实体表示就是2478932
    对资源类和对资源实体的访问和操作被称为资源请求(ResourceRequest),请求中包含要访问的资源类、资源实体(可选)以及资源动作。如上所述,资源类和资源实体可以由一个唯一的URI表示,而资源动作(即对资源增删改查)则需要用方法(Method)和参数(Param)表示。

    基于资源的请求示例

    方法 URL 示例解释
    GET  https://cnblogs.com/ 获取博客类所有实体
    GET  https://cnblogs.com/23424 获取指定博客文章的资源实体
    POST https://cnblogs.com/  创建一个博客文章,参数可以是包含初始值的对象
    PUT https://cnblogs.com/23424  更新指定博客文章资源实体,参数是增量变更的对象
    DELETE https://cnblogs.com/23424  删除指定的资源实例

    资源概念横跨后台和各类前端,两端之间采用REST风格的服务暴露形式,因此每一个资源URI会对应于一个HTTPURL,而资源请求中的方法正好对应于HTTPMethod。

    在后台,首先需要定义资源操作,约定根据URL请求路径地址信息、URL请求路径中的参数和HTTP请求方法对应的资源操作方法,映射到具体操作资源类和方法。

    HTTP存在创建、修改、访问、删除这几种操作
    Rest风格的url一般不会出现动词,对资源的操作方式已经交给了HTTPMethod了
    错误:http:xxxxxx.com/getUserById

    未使用RESTful之前与之后对比

    操作 未使用RESTful   使用RESTful
    查找(SELECT-GET)  /rest/api/getUser   /rest/api/user

    修改(UPDATE-PUT)
     /rest/api/editUser   /rest/api/user/34543
    增加(INSERT-POST)  /rest/api/addUser   /rest/api/user/34543
    删除(DELETE-DELETE)  /rest/api/deleteUser  /rest/api/user/34543



    三、SpringBoot对REST风格请求调用


    下面基于SpringBoot使用rest风格请求示例:

    @RestController 
    @RequestMapping(value="/rest/api")
    public class ConsTranChkController {
    
    @Autowired
    private IConsTranChkService consTranChkService;
    
    /**
    * RESTful查询
    * @return
    * @author liufq
    * @Date 2019年11月14日 下午5:44:41
    */
    @RequestMapping(value="/user", method=RequestMethod.GET)
    public List<Map<String, Object>> getUserInfo(){
      List<Map<String, Object>> resultList = consTranChkService.getChksList();
      System.out.println(resultList);
      return resultList;
    }
    
    /**
    * RESTful修改
    * @param userId
    * @return
    * @author liufq
    * @Date 2019年11月14日 下午5:44:56
    */
    @RequestMapping(value="user/{userId}", method=RequestMethod.PUT)
    public int editUser(@PathVariable String userId){
      System.out.println("获取到用户ID:" + userId);
      return consTranChkService.editUser(userId);
    }

    这里不再贴Dao层及业务层的代码了,只是简单说明从前端请求到spring 的控制层rest风格的接受参数,为了可以更明显的看到HTTPMethod,我们可以使用

    @RequestMapping(value="/user", method=RequestMethod.GET)比如这样的注解形式,让URL映射到对应的控制器,不过为了更好的支持REST风格的开发,

    spring之后还提供了@GetMapping,@PostMapping,@PatchMapping,@DeleteMapping
    通过@RequestMapping,@GetMapping等注解可以定位到指定的控制器方法上,通过注解@Pathvariable能够将URL参数获取,通过@RequestBody可以讲请求体为json格式的字符串转为java对象。

  • 相关阅读:
    第11组 团队Git现场编程实战
    团队项目-需求分析报告
    团队项目-选题报告
    第10组 Alpha事后诸葛亮
    第10组 Alpha冲刺(6/6)
    第10组 Alpha冲刺(5/6)
    第10组 Alpha冲刺(4/6)
    第10组 Alpha冲刺(3/6)
    第10组 Alpha冲刺(2/6)
    第10组 Alpha冲刺(1/6)
  • 原文地址:https://www.cnblogs.com/LiuFqiang/p/11861159.html
Copyright © 2011-2022 走看看