RESTful 的基本认识

在很早之前接触 Spring MVC 的时候,都知道 Spring MVC 支持 RESTful 风格API的开发,但对于 RESTful 只是有个模糊的认识,以至于甚至在开发写出来的接口其实不符合 RESTful 的要求。

定义

REST 的全称是 Resource Representational State Transfer ,资源以某种表现形式进行状态转移
Resource:资源,即数据;
Representational:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词实现。

HTTP动词有如下几个:
- GET 用来获取资源,
- POST 用来新建资源(也可以用于更新资源),
- PUT 用来更新资源,
- DELETE 用来删除资源

在RESTful API中,URL中只使用名词来指定资源,原则上不使用动词,并且一般使用复数,比如 GET 操作 https://v1/users/1 来获取用户id为1的信息资源,禁止使用 http://v1/getUserByIdhttp://v1/deleteUser 之类的url。

用处

一种技术的存在肯定是为了解决一些问题而诞生的,REST是一种软件架构模式,通过使用RESTful 风格的 API 用来解决多端(PC、Android、IOS)共用一套统一的 API ,避免重复开发。

在 SpringMVC 中的应用

用 SpringMVC 可以开发 restful 风格的restful api,以 Spring Boot 为基本框架,这里写一个基本的 controller 类

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    UserService userService;

    @RequestMapping(value="{id}", method=RequestMethod.GET)
    public String getUserById(@PathVariable("id") String userId) {
        return ResultUtil.success(userService.getUserById(userId), "操作成功");
    }

    @RequestMapping(value="{id}", method=RequestMethod.PUT)
    public String updateUser(@PathVariable("id") String userId) {
        int num = userService.updateUser(userId);
        if (1==num){
            return ResultUtil.success("操作成功");
        } else return ResultUtil.error("操作失败");
    }

    @RequestMapping(method=RequestMethod.POST)
    public String insertUser(String userCode, String userName) {
        int num = userService.insertUser(userCode, userName);
        if (1==num){
            return ResultUtil.success("操作成功");
        } else return ResultUtil.error("操作失败");
    }

    @RequestMapping(value="{id}", method=RequestMethod.DELETE)
    public String deleteUser(@PathVariable("id") String userId) {
        int num = userService.deleteUser(userId);
        if (1==num){
            return ResultUtil.success("操作成功");
        } else return ResultUtil.error("操作失败");
    }
}

ResultUtil 封装返回数据格式,这里只是一个简单的封装

public class ResultUtil {

    private final static String SUCCESS = "success";
    private final static String MSG = "msg";
    private final static String DATA = "data";

    public static String success(String msg){
        Map<String,Object> result = new HashMap<String,Object>();
        result.put(SUCCESS, true);
        result.put(MSG, msg);
        result.put(DATA, new Object());
        return JSON.toJSONString(result);
    }

    public static String success(Object data, String msg){
        Map<String,Object> result = new HashMap<String,Object>();
        result.put(SUCCESS, true);
        result.put(MSG, msg);
        result.put(DATA, data);
        return JSON.toJSONString(result);
    }

    public static String error(String msg){
        Map<String,Object> result = new HashMap<String,Object>();
        result.put(SUCCESS, false);
        result.put(MSG, msg);
        result.put(DATA, new Object());
        return JSON.toJSONString(result);
    }

    public static String error(Object data, String msg){
        Map<String,Object> result = new HashMap<String,Object>();
        result.put(SUCCESS, false);
        result.put(MSG, msg);
        result.put(DATA, data);
        return JSON.toJSONString(result);
    }
}

对应的请求url为:

查询、更新、删除: /users/1
插入: /users

有时需要管理版本号会把版本号写在url,比如 v1/users/1v2/users/1 。至于请求是什么类型的,可以在请求在head中设置,如果是ajax请求则设置比较简单

$.ajax({
    url: '/users/1',
    type: 'get',//put、delete
    success: function(data) {
        console.log(data)
    }
});

$.ajax({
    url: '/users',
    type: 'post',
    data: {
        userCode: 'test',
        userName: '测试名字'
    },
    success: function(data) {
        console.log(data)
    }
});

RESTful API 的开发涉及许多细节和技术实现,实际开发中的应用会可能会用到一些封装库和框架,这里不做深入了解,只是简单的记录自己的一些基本认识,相关的知识参考了以下的链接。

相关参考链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值