RESTful API实战笔记(接口设计及Java后端实现)
来源:互联网 发布:js offsetparent 编辑:程序博客网 时间:2024/06/06 01:18
写在前面的话
原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做:
有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的。
而且这次的代码改动较大,与原来的目录结构及代码风格相比都有很大的差别。
同时也考虑到不同的人所处的学习阶段不同,担心有人不习惯也不适应这种风格及后面的更新,有的朋友甚至可能是初学者,更适合学习ssm-demo这个基础项目。
基于以上几点,最终并没有选择把几个项目都放在一个代码仓库中,而是另外花了些时间改动并且重新创建了一个仓库,perfect-ssm另起炉灶,项目也在新的服务器和域名下部署。
接口设计
项目共有三个模块:
- 文章管理模块
- 图片管理模块
- 用户管理模块
针对以上三个模块,并结合前文《设计一套好的RESTful API》中所总结的RESTful API设计原则,对api进行改造,目标接口如下:
图片上传:原接口 [] http://ssm-demo.hanshuai.xin/loadimage/upload.do现接口 [POST] http://perfect-ssm.hanshuai.xin/images文章添加:原接口 [] http://ssm-demo.hanshuai.xin/article/save.do现接口 [POST] http://perfect-ssm.hanshuai.xin/articles 文章修改:原接口 [] http://ssm-demo.hanshuai.xin/article/save.do现接口 [PUT] http://perfect-ssm.hanshuai.xin/articles 文章列表:原接口 [] http://ssm-demo.hanshuai.xin/article/list.do现接口 [GET] http://perfect-ssm.hanshuai.xin/articles文章删除:原接口 [] http://ssm-demo.hanshuai.xin/article/delete.do现接口 [DELETE]http://perfect-ssm.hanshuai.xin/articles图片添加:原接口 [] http://ssm-demo.hanshuai.xin/picture/save.do现接口 [POST] http://perfect-ssm.hanshuai.xin/pictures图片修改:原接口 [] http://ssm-demo.hanshuai.xin/picture/save.do现接口 [PUT] http://perfect-ssm.hanshuai.xin/pictures图片列表:原接口 [] http://ssm-demo.hanshuai.xin/picture/list.do现接口 [GET] http://perfect-ssm.hanshuai.xin/pictures图片删除:原接口 [] http://ssm-demo.hanshuai.xin/picture/delete.do现接口 [DELETE]http://perfect-ssm.hanshuai.xin/pictures用户登录:原接口 [] http://ssm-demo.hanshuai.xin/user/login.do现接口 [POST] http://perfect-ssm.hanshuai.xin/users/cookie 用户列表:原接口 [] http://ssm-demo.hanshuai.xin/user/list.do现接口 [GET] http://perfect-ssm.hanshuai.xin/users 用户删除:原接口 [] http://ssm-demo.hanshuai.xin/user/delete.do现接口 [DELETE]http://perfect-ssm.hanshuai.xin/users用户添加:原接口 [] http://ssm-demo.hanshuai.xin/user/save.do现接口 [POST] http://perfect-ssm.hanshuai.xin/users修改密码:原接口 [] http://ssm-demo.hanshuai.xin/user/modifyPassword.do现接口 [PUT] http://perfect-ssm.hanshuai.xin/users
根据不同资源映射成不同的uri,对于资源的具体操作类型,由HTTP动词来表示。
java后端实现
前文中提到了一些设计原则,这一篇就是将这些原则运用到项目中,但是理论性的知识看看就忘了,我写博客的目的不是为了写理论概念,没有实际项目配合我是不会写的,我觉得通过代码实现出来,配合实战才能让理论知识吸收的更好。
由于是ssm项目,因此主要是通过SpringMVC实现,更多的是使用了SpringMVC的注解来进行简化开发。
整合过程:
- 首先是修改web.xml配置文件,使得URI可以符合RESTful风格。
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-context-mvc.xml</param-value> </init-param> <!--加载顺序为1 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
- 修改spring-context-mvc.xml配置文件,配置json消息转换器及动态资源过滤。
<!-- Start: 配置json消息转换器 & 参数解析--> <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg index="0" type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/> </bean> </property> </bean> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json; charset=UTF-8</value> </list> </property> <property name="prettyPrint" value="true"/> <property name="objectMapper" ref="objectMapper"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- End: 配置json消息转换器 & 参数解析 --> <!-- 使用了<url-pattern>/</url-pattern>,所以要对静态资源进行处理 --> <mvc:default-servlet-handler/> <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- --> <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="1"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="contentType" value="text/html"/> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean>
- @RequestMapping注解,规范和限制Http请求的请求方法。
@RequestMapping(value = "", method = RequestMethod.PUT)@RequestMapping(value = "/{ids}", method = RequestMethod.DELETE)
@ResponseBody注解,将返回结果转换为JSON格式。
增加common包,其中的工具类规定了返回状态码及返回数据的基本格式。
public class Constants { public static final int RESULT_CODE_SUCCESS = 200; // 成功处理请求 public static final int RESULT_CODE_BAD_REQUEST = 412; // bad request public static final int RESULT_CODE_SERVER_ERROR = 500; // 没有对应结果}public class Result<T> implements Serializable { private static final long serialVersionUID = 1L; private int resultCode; private String message; private T data; public Result() { }}
注意事项
几个需要注意的注解:
- @RequestMapping
- @PathVariable
- @ResponseBody
- @RequestParam
代码中大量的出现,本文中也一再强调,因此,给正在看本篇文章的你一个建议就是如果你不熟悉这几个注解,花点时间去认真学习和实践一下,知道这几个注解的用法和注意事项,网上针对这些注解的文章有很多,可以针对性的学习一下,这篇文章就不再占用篇幅去赘述了,需要代码的话,直接去我的GitHub仓库中去下载就好。
结语
首发于我的个人博客,新的项目演示地址:perfect-ssm,用户名:admin,密码:123456。
如果有问题或者有一些好的创意,欢迎给我留言,也感谢向我指出项目中存在问题的朋友,本篇主要讲述了后端的实现,关于前端的修改会在下一篇文章中讲述。
如果你想继续了解该项目可以查看整个系列文章Spring+SpringMVC+MyBatis+easyUI整合系列文章,也可以到我的GitHub仓库或者开源中国代码仓库中查看源码及项目文档。
- RESTful API实战笔记(接口设计及Java后端实现)
- RESTful API接口设计
- api,app接口,接口设计,后端接口设计
- RESTful的Api设计之统一接口
- 关于RESTful接口api的设计
- 后端实现调用其他系统Restful接口服务
- java实现后端接口加密
- RESTful接口设计---读《RESTful Web Services Cookbook》笔记
- RESTful接口设计---读《RESTful Web Services Cookbook》笔记 .
- JAVA RESTful WebService实战笔记(一)
- JAVA RESTful WebService实战笔记(二)
- JAVA RESTful WebService实战笔记(三)
- JAVA RESTful WebService实战笔记(四)
- RESTful API后台系统架构设计(Java)
- RESTful api接口规范
- restful API接口规范
- RESTful接口API设计规范
- Restful Api接口规范
- Css伪元素和伪类
- WinForm-ListBox控件美化
- 设计模式之装饰者模式篇
- HDU 6105 Gameia(树上博弈 17多校第六场)
- Java创建和解析Json数据方法(四)——Google Gson包的使用
- RESTful API实战笔记(接口设计及Java后端实现)
- HDU 6096:妙用AC自动机(666)
- MailBee.NET ObjectsL显示HTML/纯文本邮件教程(三):显示带嵌入图片的邮件
- SparkSQL---Save(Java)
- 一网打尽所有常用的header头
- Java实现敏感词过滤
- 利用FileChannel完成文件的读、写、复制
- css强制换行和超出隐藏实现
- 全屏