写在前面的话

原计划这部分代码的更新也是上传到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/users12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455

根据不同资源映射成不同的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>123456789101112131415

修改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>12345678910111213141516171819202122232425262728293031323334

@RequestMapping注解,规范和限制Http请求的请求方法。

@RequestMapping(value = "", method = RequestMethod.PUT)

@RequestMapping(value = "/{ids}", method = RequestMethod.DELETE)123

@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() {     } }1234567891011121314151617

注意事项

几个需要注意的注解:

@RequestMapping @PathVariable @ResponseBody @RequestParam

代码中大量的出现,本文中也一再强调,因此,给正在看本篇文章的你一个建议就是如果你不熟悉这几个注解,花点时间去认真学习和实践一下,知道这几个注解的用法和注意事项,网上针对这些注解的文章有很多,可以针对性的学习一下,这篇文章就不再占用篇幅去赘述了,需要代码的话,直接去我的GitHub仓库中去下载就好。

结语

首发于我的个人博客,新的项目演示地址:perfect-ssm,用户名:admin,密码:123456。   如果有问题或者有一些好的创意,欢迎给我留言,也感谢向我指出项目中存在问题的朋友,本篇主要讲述了后端的实现,关于前端的修改会在下一篇文章中讲述。

如果你想继续了解该项目可以查看整个系列文章Spring+SpringMVC+MyBatis+easyUI整合系列文章,也可以到我的GitHub仓库或者开源中国代码仓库中查看源码及项目文档。 --------------------- 作者:Named13 来源:CSDN 原文:https://blog.csdn.net/zhenfengshisan/article/details/77101527 版权声明:本文为博主原创文章,转载请附上博文链接!

RESTful API实战笔记(接口设计及Java后端实现)的更多相关文章

  1. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

  2. RESTful Api 身份认证安全性设计

    REST是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 H ...

  3. RESTful API后台系统架构设计(Java)

    最近设计和实现了一个JAVA的RESTful API的后台业务系统架构,主要基于Java平台.设计要求是: 性能:平均响应时间(RESTful API)小于2s(平均负载的情况下),并发访问200个以 ...

  4. Flask RESTful API搭建笔记

    之前半年时间,来到项目的时候,已经有一些东西,大致就是IIS+MYSQL+PHP. 所以接着做,修修补补,Android/iOS与服务器数据库交换用PHP, Web那边则是JS+PHP,也没有前后端之 ...

  5. mysql颠覆实战笔记(一)--设计一个项目需求,灌入一万数据先

    版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  6. 【RESTful风格】软件接口设计中RESTful风格

    REST = Representational State Transfer 表述性状态转移,是一种软甲接口设计风格.总之就是一种风格 REST基于:HTTP.HTML.JSON.XML.URI 这些 ...

  7. 【Tech】CAS RESTful API使用笔记

    在被maven,cas,tomcat各种贱人就是矫情的虐了好几天之后,终于跑通了demo,哈哈哈哈哈哈哈~ 在这里详细记录一下,给和我一样连maven都不会的小白一点福利,同时欢迎大神指正. 首先上最 ...

  8. Restful API实战

    简介:随着移动互联网的发展,客户端层出不穷,app,web,微信端等等,而后端业务逻辑基于是一致的,如何做到业务逻辑“一次编写,随时接入”?答案是通过远程调用API,而目前比较火的方案是“Restfu ...

  9. API开放平台接口设计-------令牌方式

    1.需求:现在A公司与B公司进行合作,B公司需要调用A公司开放的外网接口获取数据,如何保证外网开放接口的安全性? 2,使用令牌方式 比如支付宝对外提供支付的接口,爱乐生公司需要调用支付宝的接口.在爱乐 ...

随机推荐

  1. 【学习笔记】JS设计模式总结

    前言:这段时间都在学习Vue的知识,虽然手边放着一本js高程,但确实好久没有好好复习了.温故而知新,因此特意把JS常见的设计模式总结,希望对大家有所帮助... 1. 工厂模式 释义:像工厂一样流水线般 ...

  2. R语言学习笔记(五)绘图(1)

      R是一个惊艳的图形构建平台,这也是R语言的强大之处.本文将分享R语言简单的绘图命令.   本文所使用的数据或者来自R语言自带的数据(mtcars)或者自行创建.   首先,让我们来看一个简单例子: ...

  3. 还需要注册的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:

             还需要注册的是我们还有一个是"交差集" cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积.表 ...

  4. Object与Class的区别

    1.在Scala中声明private变量,Scala编译器会自动生成get,set方法 2.在Scala中变量需要初始化 3.在Scala中没有静态修饰符,在object下的成员全部都是静态的,如果在 ...

  5. [Laravel] Laravel的基本数据库操作部分

    [laravel] laravel的数据库配置 找到程序目录结构下.env文件 配置基本的数据库连接信息 DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog ...

  6. (2)Microsoft office Word 2013版本操作入门_快速选中

    1.快速选中一行 .一段文字: 1.1光标在一行内,双击会选中一个词组.快速点击三下会选中一段, 1.2 鼠标移动到行首,单击击会选中一行,双击选中一段. 1.3 选择全部内容 Ctrl+A  , 1 ...

  7. 【github&&git】1、github中的watch、star、fork的作用

    [转自:http://www.jianshu.com/p/6c366b53ea41] 在每个 github 项目的右上角,都有三个按钮,分别是 watch.star.fork,但是有些刚开始使用 gi ...

  8. 微信服务器配置令牌(Token)

    实现步骤: 第一步:填写服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL).Token和EncodingAESKey,其中UR ...

  9. 功率因数cosφ仪表盘

    一.截图 二.说明 本篇博客主要是有三个亮点: ① 刻度标注在仪表盘标线外 ② 仪表盘存在两个刻度值,分别是(正)0.5~1 和(负)-1~-0.5 ③ 仪表盘内标注,分别是“超前”和“滞后” 三.代 ...

  10. canvas-2arcTo.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...