如何写接口项目

最近有人问我怎么写接口项目,在此简单的说一下。

什么是接口项目?
前后端分离的项目需要接口,一般来说接口项目的数据传输格式大部分是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

猜你喜欢

转载自blog.csdn.net/qq_21119773/article/details/82019157