跳转至

D. Servlet与WebAPI

D. Servlet与WebAPI

更新日期:2020-04-20


1. 定义WebAPI接口

所谓的WebAPI,其实与本地API一样,无非是我们调用了一个接口,传递指定好的参数,然后取得想要的结果(也就是响应或者应答)。 WebAPI通常是部署在服务器上,调用者需要通过网络请求来进行调用。

首先来看看如何定义一个WebAPI,并使其实现与本地API类似的功能。

假设我们像这样调用一个本地API函数:

1
UserInfor userInfo = LocalAPI.lookUpUserInfo("Li Lei", 20);

为了达到类似的效果,我们来简单的设计一个WebAPI。

设计例子

(1) 简单的调用

1
2
get     https://localhost/myapi/lookUpUserInfo?name=L1%20Lei&age=20
post    https://localhost/myapi/lookUpUserInfo ※在Body中传递参数

只要你会发http请求,就能调用。

(2) 传递参数

这里采用post方法在请求体里设定要传递的参数。我们可以约定请求体里面放的内容格式是json串,然后像下面这样指定参数:

1
2
3
4
{
    "name":"Li Lei",
    "age": 20
}

(3) 接受返回值

可以通过response对象得到HTTP响应的响应体。假如我们同样约定本函数使用json串来返回数据。那它的响应体可以设计成下面这样:

1
2
3
4
5
6
7
{
    "name":"Li Lei",
    "age": 20,
    "math_score": 120,
    "english_score": 145,
    ... ...
}

json格式的结果很容易处理,所以目前被使用的比较多。 实际上HTTP响应体里可以放任何数据,包括二进制数据。比如一张图片,一个压缩包。

2. 实现WebAPI接口

使用Java Servlet实现这样一个接口非常容易,你只需要在你的web工程中定义这样一个类,然后发布你的工程,就可以了:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@WebServlet("/lookUpUserInfo")
public class UserInfoAPI extends HttpServlet {
    
    @Override
    protected void doGet(request, response)  {
        
        //从request中取出请求体中的json串
        // 从json串中取出参数name和age
        
        //  业务处理
        
        //  处理结果转为json串
        //  将json串写入响应体
    }

上面的例子中实现了doGet,也就是get方法。doPost也是一样的道理。

WebServlet注解是Servlet 3.0版本中新提供的注解。这样写很方便,省去了在web.xml中配置servlet的繁琐过程。

并且,这个类也可以不放在Web工程中,而放在web工程引用的Jar工程中。