粗谈RESTFul API接口-认识粗谈RESTFul API接口-认识

时间:2021-03-18 14:13:19   收藏:0   阅读:0

粗谈RESTFul API接口-认识

一、背景

随着互联网和移动设备得发展,人们对Web应用的使用需求也增加,传统的动态页面由于低效率而渐渐被HTML+JavaScript(Ajax)的前后端分离所取代!所以一套结构清晰、符合标准、易于理解、扩展方便让大部分人都能够理解接受的接口风格就显得越来越重要,而RESTful风格的接口(RESTful API)刚好有以上特点,就逐渐被实践应用而变得流行起来

二、介绍

有位大佬总结了一句话,用URL定位资源,用Http请求描述操作!-我认为就是RESTFul的精华。

主要特点:

HTTP请求

  1. GET 从服务器取出资源(一项或多项)。
  2. POST 在服务器新建一个资源。
  3. PUT 在服务器更新资源(客户端提供完整资源数据)。
  4. PATCH 在服务器更新资源(客户端提供需要修改的资源数据)。
  5. DELETE 从服务器删除资源。
HTTP Method 安全性 幂等性 备注
GET 安全 幂等 读操作安全,查询一次多次结果一致
POST 非安全 非幂等 写操作非安全,每多插入一次都会出现新结果
GET 安全 幂等 写操作非安全,一次和多次更新结果一致
GET 安全 幂等 写操作非安全,一次和多次删除结果一致

RESTFul和非RESTFul比较

技术图片

主要用于前后端分离,前端拿到数据只负责展示和渲染,不对数据做任何处理,后端处理数据并以JSON格式传输出去,定义这样一套统一风格的接口,可以叫做RestFul接口。说白了只是一种设计风格!

URL

URL:统一资源定位符

HTTP/1.1:

状态码

三、示例代码

RESTFul API 示例,基于SpringBoot MyBatis MySQL

1. 搞一个表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user_login
-- ----------------------------
DROP TABLE IF EXISTS `user_login`;
CREATE TABLE `user_login`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘id‘,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL COMMENT ‘用户名‘,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NULL DEFAULT NULL COMMENT ‘密码‘,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user_login
-- ----------------------------
INSERT INTO `user_login` VALUES (1, ‘admin‘, ‘123456‘);
INSERT INTO `user_login` VALUES (8, ‘tom‘, ‘root‘);

SET FOREIGN_KEY_CHECKS = 1;

2. controller

@RestController
public class MyRestController {

    @Resource
    private UserLoginService userLoginService;

    @GetMapping("/users")
    public List<UserLogin> queryAll() {
        return userLoginService.queryAll();
    }

    @GetMapping("/users/{id}")
    public UserLogin queryById(@PathVariable("id") Integer id) {
        return userLoginService.queryById(id);
    }

    @PostMapping("/users")
    public int add(UserLogin userLogin) {
        return userLoginService.add(userLogin);
    }

    @PutMapping("/users/{id}")
    public int update(@PathVariable("id") Integer id,
                            @RequestParam("username") String username,
                            @RequestParam("password") String password) {
        UserLogin user = userLoginService.queryById(id);
        user.setUsername(username);
        user.setPassword(password);
        return userLoginService.update(user);
    }

    @DeleteMapping("/users/{id}")
    public int delete(@PathVariable("id") Integer id) {
        return userLoginService.deletebyId(id);
    }

}

3. mapper

public interface UserLoginMapper {

    public List<UserLogin> queryAll();

    public int add(UserLogin userLogin);

    public UserLogin queryByName(String username);

    UserLogin queryById(Integer userId);

    int update(UserLogin userLogin);

    int deleteById(Integer userId);
}

4. xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.centanet.common.mapper.UserLoginMapper">

    <select id="queryAll" resultType="com.centanet.common.pojo.UserLogin">
        select * from mybatis.user_login
    </select>

    <insert id="add" parameterType="com.centanet.common.pojo.UserLogin">
        insert into mybatis.user_login(username, password)
        values (#{username}, #{password})
    </insert>

    <update id="update" parameterType="com.centanet.common.pojo.UserLogin">
        update mybatis.user_login
        set username = #{username},
            password = #{password}
        where id = #{id}
    </update>

    <select id="queryByName" resultType="com.centanet.common.pojo.UserLogin">
        select *
        from mybatis.user_login
        where username = #{username}
    </select>

    <select id="queryById" resultType="com.centanet.common.pojo.UserLogin">
        select *
        from mybatis.user_login
        where id = #{id}
    </select>

    <delete id="deleteById" parameterType="java.lang.Integer">
        delete
        from mybatis.user_login
        where id = #{id}
    </delete>

</mapper>

5. 效果

技术图片

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!