前面我们把结果数据计算好了,那接下来我们需要开发数据接口,对外提供数据。
首先定义接口文档
一、数据接口文档定义
为了方便跨部门数据使用,我们需要定义接口文档,便于其他部门的同事使用我们的数据
二、数据接口代码开发
开发数据接口需要用到javaweb项目,在这给大家演示一下如何基于spring-boot搭建一个javaweb项目
创建子module项目:data_server
在pom.xml中添加依赖
首先添加spring-boot的依赖,还有fastjson依赖,因为我们后面在传输数据的时候需要使用json格式
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
</dependencies>
然后把编译打包的配置也添加进去
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<mainClass>com.imooc.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
在项目的resource目录中添加这两个文件
下载地址:
application.properties
logback.xml
创建包:com.imooc
然后把下面这几个文件夹及文件拷贝到com.imooc包里面
controller
Application.java
这个项目目前的结构是这样的
直接在Application类中右键执行,就可以启动这个javaweb项目,项目内部已经集成了tomcta容器,监听的端口是8085
验证项目是否可以正常访问。
在浏览器中访问
http://localhost:8085/v1/t1?name=hadoop
hello,hadoop
能看到结果数据说明此项目的基础框架是ok的,接下来我们就来开发一个接口
由于在这我们需要操作redis,所以需要到pom.xml中增加jedis的依赖,以及把我们之前开发的RedisUtils工具类也拷贝过来。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
在com.imooc下创建utils目录,把RedisUtils拷贝到里面
接下来到DataController类中增加一个方法:getRecommendList
代码如下:
/**
* 根据主播uid查询三度关系推荐列表数据
* 返回数据格式:
* {"flag":"success/error","msg":"错误信息","rec_uids":["1005","1004"]}
* @param uid: 主播uid
* @return
*/
@RequestMapping(value="/get_recommend_list",method = RequestMethod.GET)
public JSONObject getRecommendList(@RequestParam("uid") String uid) {
JSONObject resObj = new JSONObject();
String flag = "success";
String msg = "ok";
try{
Jedis jedis = RedisUtils.getJedis();
//获取待推荐列表数据
List<String> uidList = jedis.lrange("l_rec_" + uid, 0, -1);
String[] uidArr = uidList.toArray(new String[0]);
resObj.put("rec_uids",uidArr);
}catch (Exception e){
flag = "error";
msg = e.getMessage();
logger.error(msg);
}
resObj.put("flag",flag);
resObj.put("msg",msg);
return resObj;
}
重新启动data_server项目
然后在浏览器中访问刚才开发的接口,能看到正常输出结果则说明此接口是正常的。
http://localhost:8085/v1/get_recommend_list?uid=1000
{“msg”:“ok”,“flag”:“success”,“rec_uids”:[“1005”,“1004”]}
对项目打jar包
D:\IdeaProjects\db_video_recommend_v2\data_server>mvn clean package -DskipTests
[INFO] Scanning for projects...
[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ data_server ---
[INFO] Building jar: D:\IdeaProjects\db_video_recommend_v2\data_server\target\data_server-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.1.RELEASE:repackage (default) @ data_server ---
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.535s
[INFO] Final Memory: 24M/409M
[INFO] ------------------------------------------------------------------------
将jar包上传到jobs目录里面
[root@bigdata04 jobs]# ll
-rw-r--r--. 1 root root 18002786 Sep 7 2020 data_server-1.0-SNAPSHOT.jar
启动
[root@bigdata04 jobs]# nohup java -jar data_server-1.0-SNAPSHOT.jar &
[1] 5736
验证
[root@bigdata04 jobs]# curl -XGET 'http://bigdata04:8085/v1/get_recommend_list?uid=1000'
{"msg":"ok","flag":"success","rec_uids":["1005","1004"]}