RestFull风格

RestFull风格

概念

restful是一种软件架构设计风格,而不是标准,只是提供了一组设计原则和约束条件,基于restful风格设计的软件更简洁,更有层次,更易于实现缓存

对比

传统URL请求方式

http://127.0.0.1:8080/stu/getStudent?userId=mozun  #查询、get请求
http://127.0.0.1:8080/stu/addStudent			   #新增、post请求
http://127.0.0.1:8080/stu/delStudent?userId=mozun  #删除、get或者post请求
http://127.0.0.1:8080/stu/updateStudent			   #修改、post请求

#们会显示的通过方法路由和来区分用户对应做的什么操作。这个时候不利于方法路由重复,而且显示的定义了具体的操作

restful风格

http://127.0.0.1:8080/stu/student/mozun  	#查询、get请求
http://127.0.0.1:8080/stu/student/			#新增、post请求
http://127.0.0.1:8080/stu/student/  		#删除、put请求
http://127.0.0.1:8080/stu/student/mozun		#修改、delete请求

#资源路由复用,具有一定安全性吧(待验证)

常用HTTP状态码

状态码 描述
200 – OK 一切正常
201 – OK 新的资源已经成功创建
204 – OK 资源已经成功擅长
304 – Not Modified 客户端使用缓存数据
400 – Bad Request 请求无效,需要附加细节解释如 "JSON无效"
401 – Unauthorized 请求需要用户验证
403 – Forbidden 服务器已经理解了请求,但是拒绝服务或这种请求的访问是不允许的。
404 – Not found 没有发现该资源
422 – Unprocessable Entity 只有服务器不能处理实体时使用,比如图像不能被格式化,或者重要字段丢失。
500 – Internal Server Error 服务器后端异常

本文参考链接

https://blog.csdn.net/qq_27026603/article/details/82012277

restful代码实测

后端SpringMVC

package com.lwp.study.controller;

import com.lwp.study.blog.pojo.User;
import com.lwp.study.blog.service.UserService;
import com.lwp.study.dao.StudentMapper;
import com.lwp.study.pojo.Student;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("testRestFul")
@Api(value="测试学生接口",tags = "学生相关接口")
public class StudentRestFulController {

    @Autowired
    private UserService userService;

    @GetMapping("/user/{userid}")
    @ApiOperation("查询所有指定信息")
    public List<User> getUserById(@PathVariable(value="userid") String userId){
        //测试请求 -->http://127.0.0.1:18080/testRestFul/user/lwp
        return userService.listByIds(Arrays.asList(userId));
    }

    @PostMapping("/user")
    //方法参数说明,name参数名;value参数说明,备注;dataType参数类型;required 是否必传
    @ApiImplicitParam(name="user",value="用户对象")
    //方法注释
    @ApiOperation("添加用户")
    public List<User> addUser(User user){
        userService.save(user);
        return userService.list();
    }


    @PutMapping("/user")
    @ApiImplicitParam(name="user",value="用户对象")
    @ApiOperation("修改用户信息")
    public List<User> updateUser(User user){
        userService.updateById(user);
        return userService.list();
    }

    @ApiImplicitParam(name="userId",value="学生主键标识",dataType = "String",required = true)
    @ApiOperation("删除学生信息")
    @DeleteMapping("/user/{userId}")
    public List<User> delUser(@PathVariable String userId){
        userService.removeById(userId);
        return userService.list();
    }
}

客户端Swagger2

put请求

Curl
curl -X PUT "http://127.0.0.1:18080/testRestFul/user?age=21&userid=lwp&username=%E5%98%BB%E5%98%BB" -H "accept: */*"

Request URL
http://127.0.0.1:18080/testRestFul/user?age=21&userid=lwp&username=%E5%98%BB%E5%98%BB

post请求

Curl
curl -X POST "http://127.0.0.1:18080/testRestFul/user?address=%E6%B9%96%E5%8D%97%E9%83%B4%E5%B7%9E&age=22&telphone=11012010086&userid=xixi&username=%E6%BA%AA%E9%A3%8E" -H "accept: */*"

Request URL
http://127.0.0.1:18080/testRestFul/user?address=%E6%B9%96%E5%8D%97%E9%83%B4%E5%B7%9E&age=22&telphone=11012010086&userid=xixi&username=%E6%BA%AA%E9%A3%8E

get请求

Curl
curl -X GET "http://127.0.0.1:18080/testRestFul/user/xixi" -H "accept: */*"

Request URL
http://127.0.0.1:18080/testRestFul/user/xixi

delete请求

Curl
curl -X DELETE "http://127.0.0.1:18080/testRestFul/user/test" -H "accept: */*"

Request URL
http://127.0.0.1:18080/testRestFul/user/test

注意点

#单个参数或少部分参数时,我们可以通过PathVariable("id")来指定路由上的映射关系,如果路由参数和方法参数一致不需要指定名称
#当时一定要使用@PathVariable注解,以下有对比

#不使用@PathVariable注解请求路径:http://127.0.0.1:18080/testRestFul/user/{userId}?userId=lwp
#使用@PathVariable注解请求路径:http://127.0.0.1:18080/testRestFul/user/lwp
 	@GetMapping("/user/{id}/{name}")
    @ApiOperation("查询所有指定信息")
    public List<User> getUserById(@PathVariable("id") String userId,String name){
    	
    }
posted @ 2021-07-24 13:35  幸运刘  阅读(659)  评论(0)    收藏  举报