SpringBoot学习(八)--SpringBoot中Restful最佳实践

转自https://blog.csdn.net/u011961421/article/details/79413897

简介
REST:英文representational state transfer直译为表现层状态转移,或者表述性状态转移;Rest是web服务的一种架构风格,一种设计风格,是一种思想;同时Rest不是针对某一种编程语言的。 
以webService为例通俗解释。 
非Rest设计,以往我们都会这么写: 
http://localhost:8080/admin/getUser (查询用户) 
http://localhost:8080/admin/addUser (新增用户) 
http://localhost:8080/admin/updateUser (更新用户) 
http://localhost:8080/admin/deleteUser (删除用户) 
总结:以不同的URL(主要为使用动词)进行不同的操作。

Rest架构: 
GET http://localhost:8080/admin/user (查询用户) 
POST http://localhost:8080/admin/user (新增用户) 
PUT http://localhost:8080/admin/user (更新用户) 
DELETE http://localhost:8080/admin/user (删除用户) 
总结:URL只指定资源,以HTTP方法动词进行不同的操作。用HTTP STATUS/CODE定义操作结果。

Restful:遵守了rest风格的web服务便可称为Restful。

为什么需要Restful?

URL具有很强可读性的,具有自描述性
规范化请求过程和返回结果
资源描述与视图的松耦合
可提供OpenAPI,便于第三方系统集成,提高互操作性
提供无状态的服务接口,降低复杂度,可提高应用的水平扩展性
实战
在之前SpringBoot学习系列的工程基础上,添加Restful API。Restful的核心在controller,以用户的增删改查为例,代码如下

package com.pf.org.cms.web;

import com.alibaba.fastjson.JSONObject;
import com.pf.org.cms.common.IConstants;
import com.pf.org.cms.entity.JsonBean;
import com.pf.org.cms.entity.UserInfo;
import com.pf.org.cms.service.UserService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;

import java.util.Map;

/**
 * @Auther: pf
 * @Date: 2018/2/27 19:52
 * @Description:
 */
@RestController
@RequestMapping(value = "/admin")
public class AdminController {
    @Autowired
    UserService userService;

    @ApiOperation(value = "getUser", notes = "管理员接口获取用户")
    @RequestMapping(method = RequestMethod.GET, value = "/user")
    public String getUser(@RequestParam long id) {
        JsonBean reData = new JsonBean();
        Map user = userService.getUserInfo(id);
        reData.setStatus(IConstants.RESULT_INT_SUCCESS);
        reData.setMessage("查询成功");
        reData.setData(user);
        return JSONObject.toJSONString(reData);
    }

    @ApiOperation(value = "addUser", notes = "管理员接口新增用户")
    @RequestMapping(method = RequestMethod.POST, value = "/user")
    public String addUser(@RequestParam String user) {
        JsonBean reData = new JsonBean();
        UserInfo userInfo = (UserInfo) JSONObject.parseObject(user, UserInfo.class);
        if (userService.addUserInfo(userInfo)) {
            reData.setStatus(IConstants.RESULT_INT_SUCCESS);
            reData.setMessage("新增成功");
        } else {
            reData.setStatus(IConstants.RESULT_INT_ERROR);
            reData.setMessage("新增失败");
        }
        return JSONObject.toJSONString(reData);
    }

    @ApiOperation(value = "updateUser", notes = "管理员接口更新用户")
    @RequestMapping(method = RequestMethod.PUT, value = "/user")
    public String updateUser(@RequestParam String user) {
        JsonBean reData = new JsonBean();
        UserInfo userInfo = (UserInfo) JSONObject.parseObject(user, UserInfo.class);
        if (userService.updateUserInfo(userInfo)) {
            reData.setStatus(IConstants.RESULT_INT_SUCCESS);
            reData.setMessage("更新成功");
        } else {
            reData.setStatus(IConstants.RESULT_INT_ERROR);
            reData.setMessage("更新失败");
        }
        return JSONObject.toJSONString(reData);
    }

    @ApiOperation(value = "delUser", notes = "管理员接口删除用户")
    @RequestMapping(method = RequestMethod.DELETE, value = "/user")
    public String delUser(@RequestParam long id) {
        JsonBean reData = new JsonBean();
        if (userService.deleteUserInfo(id)) {
            reData.setStatus(IConstants.RESULT_INT_SUCCESS);
            reData.setMessage("删除成功");
        } else {
            reData.setStatus(IConstants.RESULT_INT_ERROR);
            reData.setMessage("删除失败");
        }
        return JSONObject.toJSONString(reData);
    }
}

@RestController作用相当于@ResponseBody + @Controller 
这里的在线API工具使用的是SpringBoot学习(六)中介绍的swagger,@ApiOperation为swagger中的注解。

UserService这里不做介绍,即为基础的增删改查服务,运行工程,访问swagger-ui.html页面后结果为: 

根据自己的测试数据测试一下查询接口: 


也可以再测试一下新增用户的接口 


最后,Restful的实现并不复杂,最重要的是需要理解Restful的思想,并且在架构设计好后更加规范的编码执行。本文及本系列项目工程地址:https://github.com/15651037763/cms
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值