最近有人问我怎么写接口项目,在此简单的说一下。
什么是接口项目?
前后端分离的项目需要接口,一般来说接口项目的数据传输格式大部分是json,小部分是xml。说到json,接口项目一般采用ajax实现数据上的交互。
接口项目的使用场景?
andriod app,ios app,前端是html静态页面(jsp,php等这些项目不是)
如何写接口项目呢?
这个要根据项目的具体框架而定了,其实也就是一般的post请求,或者get请求,只不过返回的数据是json格式而已。跟平常做非接口项目并没有太大的区别。处于安全考虑可以使用白名单避免他人恶意调用接口。对于用户接口,可以在用户登陆之后返回一个唯一标识token,调用用户接口时进行身份验证,也可以设置token的有效时间。
下面以servlet为例
目录结构如下图:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>impl</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>entrance</display-name>
<servlet-name>entrance</servlet-name>
<servlet-class>s.jf3q.com.servlet.entrance</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>entrance</servlet-name>
<url-pattern>/entrance</url-pattern>
</servlet-mapping>
</web-app>
servlet类
package s.jf3q.com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import s.jf3q.com.controller.IndexList;
import s.jf3q.com.controller.Land;
/**
* Servlet implementation class entrance
*/
public class entrance extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public entrance() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost( request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String func=request.getParameter("func");
String returnObj=null;
try {
//通过func参数的值,来判断进行不同的业务处理
if(func.equals("indexList")) returnObj=new IndexList().getObj(request, response);
if(func.equals("land")) returnObj=new Land().getObj(request, response);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setCharacterEncoding("utf-8");
response.getWriter().print(returnObj);
response.getWriter().flush();
response.getWriter().close();
}
}
处理get请求,servlet名称entrance,参数func=indexList(通过func参数的值,来判断进行不同的业务处理,请看servlet代码)
访问路径http://localhost:8080/impl/entrance?func=indexList
后台代码:
package s.jf3q.com.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import org.json.JSONObject;
import s.jf3q.com.bean.Message;
public class IndexList {
public IndexList() {
// TODO Auto-generated constructor stub
}
public String getObj(HttpServletRequest request, HttpServletResponse response) throws JSONException{
List li=new ArrayList();
li.add("1");
li.add("2");
li.add("3");
li.add("4");
li.add("5");
li.add("6");
li.add("7");
li.add("8");
Message message=new Message();
message.setState(1);
message.setMess("请求成功了");
message.setObj(li);
return new JSONObject(message).toString();
}
}
前台代码
可以浏览器直接输入http://localhost:8080/impl/entrance?func=indexList
也可以专门写一个前台页面的超链接,方便以后测试。如下图:
这就是get请求接口,如果需要拼接其他的参数,可以在后面直接写&xx=xx
接下来看看post请求
前台代码,func是隐藏域,func=land代表将要进入登陆的逻辑方法里
后台代码
package s.jf3q.com.controller;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import org.json.JSONObject;
import s.jf3q.com.bean.Message;
import s.jf3q.com.bean.User;
public class Land {
public Land() {
// TODO Auto-generated constructor stub
}
public String getObj(HttpServletRequest request, HttpServletResponse response) throws JSONException{
String username=request.getParameter("username");
String password=request.getParameter("password");
Message message=new Message();
if(username.equals("admin")&&password.equals("123456")){
User user=new User();
user.setUsername(username);
user.setPassword(password);
user.setToken( UUID.randomUUID().toString().replaceAll("-", ""));
message.setState(1);
message.setMess("请求成功了");
message.setObj(user);
}else{
message.setState(0);
message.setMess("登录失败");
message.setObj(null);
}
return new JSONObject(message).toString();
}
}
提交数据之后
一般来说接口项目入口就一个,返回数据统一用json封装,返回状态码,信息提示,前台需要的数据。在和前端对接接口之前,要和前端工程师商量好需要的那些参数,在项目写完后,记得提醒前端工程师将网址换成外网的网址即可。如果还是不懂,可以加我扣扣1913284695