什么是RESTful?
RESTful(Representational State Transfer)是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
具体实现逻辑
利用RESTful实现一个注册页面,他的逻辑很简单。前端从html页面中获取到用户的相关输入,然后通过AJAX向后台发送请求,后台解析请求,从中获取数据,并将其存储到数据库。等后台处理好请求信息之后,返回前端相关的信息,这就是整个API实现的逻辑。
项目结构
笔者所用的开发环境为IDEA,这里所展示的就是整个项目的目录结构。下面我就对整个项目目录做相关的介绍。
- daos目录
daos目录下存放的是的一些数据持久层访问的DAO模型,其中就有我们本次注册要用的而且实现了的UserDaoImpl类,它是JAVA对象和数据库的桥梁。
- models目录
models目录中存放的是我们一些项目的数据模型,比如用户注册中的用户模型就被我们抽象为JAVA对象,其实现类便存放在这个目录下。
- servlet目录
servlet目录中存放了一些处理Http请求的JAVA Servlet Class,这些类帮助我们完成请求的处理,是整个项目的核心。
- utils目录
utils目录中存放了一些我们自定义的工具类,这些类的实例化对象是帮助我们完成请求的处理的工具,例如我们这个项目中的MysqlSington,他就是一个帮助我们连接Mysql的工具类。
前端页面源码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#regbox{
margin: auto;
margin-top: 30px;
text-align: center;
align-items: center;
}
</style>
<script type="text/javascript">
//入口函数
window.onload = function(){
var usernameDocument = document.getElementById("username");
var passwordDocument = document.getElementById("password");
var btnSubmit = document.getElementById("submit");
btnSubmit.onclick = function () {
var username = usernameDocument.value;
var password = passwordDocument.value;
if(!(username && password)){
alert("请填写完整的信息");
return;
}
//生成post url
var postFormUrl = "username="+username + "&" + "password=" + password;
//向后台发送AJAX请求
var AJAX = new XMLHttpRequest();
AJAX.open("POST", "http://localhost:8080/api-test/register",true);
//设置请求格式为post url形式
AJAX.setRequestHeader("content-type","application/x-www-form-urlencoded");
//向后台发送AJAX请求
AJAX.send(postFormUrl);
//监听AJAX的异步返回
AJAX.onreadystatechange = function () {
//判断返回状态码是否正确
if(AJAX.status == 200 && AJAX.readyState == 4){
var resMessage = AJAX.responseText;
alert(resMessage);
}
}
}
}
</script>
</head>
<body>
<div id="regbox">
<span>username</span>
<br><br>
<input type="text" id="username">
<br><br>
<span>password</span>
<br><br>
<input type="password" id="password">
<br><br>
<button id="submit">注册</button>
</div>
</body>
</html>
注册API的Servlet源码
package com.atomlink.api.test.servlet;
import com.atomlink.api.test.daos.UserDaoImpl;
import com.atomlink.api.test.models.User;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class RegisterServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8"); //设置请求中内容的编码格式,防止中文乱码
resp.setContentType("text/html;charset=UTF-8"); //设置相应MIME及编码格式
String username = req.getParameter("username");
String password = req.getParameter("password");
UserDaoImpl tmp = new UserDaoImpl();
try {
tmp.addNew(new User(username,password,1,1));
resp.getWriter().write("注册成功");
} catch (SQLException e) {
e.printStackTrace();
resp.getWriter().write("注册失败");
}
}
}
总结
通过设计API来实现RESTful的设计模式,这样我们设计出来的web程序可以有良好的适应性。因为在我们整个项目中,我们的后端根本就不在乎前端页面是怎么样的,后端完全的转移到数据的管理中。而我们的前端也不要了解后台的逻辑是什么,只需要在乎后台传给我们什么的数据,进而去管理我们的前端UI界面。这样只要我们接口的规范性得到了同一,那么我们就可以完成完完整整的前后端分离的开发模式。
除此之外,我们的web程序将不仅仅使用适用于PC或者Mobile端的网页。只要是符合我们后台API设计的任何应用,都可以通过我们的API获取到想要的数据,进而完成前端的数据持久。