后端编写前端接口规范:
程序员文章站
2022-04-24 18:46:35
...
接口一:
前端接口需要的返回值:
| 字段 | 类型 | 描述 |
| ----- | ------ | ------ |
| eventTotal | string | 活动参与总人次 |
| userTotal | string | 用户总数量 |
| digitTotal | string | 数字资源总量 |
| clickTotal | string | 各网站年均总点击量 |
| organTotal | string | 全国文化机构总数量 |
| microTerminal | string | “两微一端”用户总数 |
| houseTotal | string | 馆舍总面积 |
| employTotal | string | 从业人员总数量 |
| closeDate | number| 数据截至时间 |
| closeYear | number| 微端截至年份 |
| closeMonth| number| 微端截至月份 |
返回示例:
```json
{
eventTotal: "9.70亿",
userTotal:"15,698,643",
digitTotal:"2.21万",
clickTotal:"14.12亿",
organTotal:"4.76万",
microTerminal: '107.21万‘,
houseTotal:"5851.27万",
employTotal:"24.32万",
closeDate: 2018,
closeYear: 2019,
closeMonth: 9
}
```
数据库建立的字段和属性:有几个字段遗漏未建立,只是演示:
利用mybatisPlus生成器生成,前面博客有讲解:
返回数据编写:
@Controller
@RequestMapping("/testDemo")
public class TestDemoController {
@Resource
ITestDemoService iTestDemoService;
/**
* 访问地址:localhost:8081/testDemo/getAll
* @return
*/
@RequestMapping("/getAll")
@ResponseBody
public TestDemo bddPoolBrpdcpListAll(){
List<TestDemo> testDemos = iTestDemoService.selectByMap(null);
return testDemos.get(0);
}
}
//TestDemo是对应表生成的表的类,最终返回一条了数据;
测试结果一:
接口二:
参数:
返回值:
| 字段 | 类型 | 描述 |
| ------ | -------------- | --------------------- |
| country | string,number | 国家中心 |
| province | string,number | 省级分中心 |
| city | string,number | 地级市级支中心 |
| county | string,number | 县级支中心 |
| town | string,number | 乡镇基层服务点 |
| village | string,number | 村基层服务点 |
| countryLibrary | string,number | 国家图书馆 |
| provinceLibrary | string,number | 省级图书馆 |
| cityLibrary | string,number | 地市级图书馆 |
| countyLibrary | string,number | 县级图书馆|
| sysCloseData | string,number | 截至日期 |
示例:
```json
{
country: "1",
province: "33",
city: "333",
county: "2843",
town: "32179",
village: "70万",
countryLibrary: "1",
provinceLibrary: "41",
cityLibrary: "485",
countyLibrary: "2740",
sysCloseData: "2019",
}
```
数据库建立的字段和属性:
返回数据编写:
@Controller
@RequestMapping("/serviceNetwork")
public class ServiceNetworkController {
@Resource
IServiceNetworkService iServiceNetworkService;
/**
* 访问地址:localhost:8081/serviceNetwork/getAll
* @return
*/
@RequestMapping("/getAll")
@ResponseBody
public ServiceNetwork bddPoolBrpdcpListAll(){
List<ServiceNetwork> testDemos = iServiceNetworkService.selectByMap(null);
return testDemos.get(0);
}
}
//ServiceNetwork 是数据表相关属性对应的类,
测试结果二:
接口三:
数据库中真是存在的字段如下:数据库中的字段只有resname,rescode,resnum,quanunit,和statime等
分析:数据库中 并没有我们所需要的字段属性,所以,我们需要建立自己的类属性和数据库中的属性对应起来,
自己建立了三个类:分别为:
DataSource类:通过建立另外两个类将他们联系起来,
参数:
返回值:
| 字段 | 类型 | 描述 |
| ------ | -------------- | --------------------- |
| newspaper | object | 报纸数据 |
| book | object | 图书数据 |
| audio | object | 音频数据 |
| periodical | object | 期刊数据 |
| video | object | 视频数据 |
| tool | object | 工具书数据 |
| picture | object | 图片数据 |
| network | object | 网络资源 |
| metadata | object | 元数据 |
| buildingTotal | object | 数字资源建设总量 |
| resCloseDate | object | 截至日期 |
示例:
```json
{
newspaper:{
name:"报纸",
value: "630"
},
book:{
name:"图书",
value: "472万"
},
audio:{
name:"音频",
value: "94,835"
},
periodical:{
name:"期刊",
value: "1,542万"
},
video:{
name:"视频",
value: "95,613"
},
tool:{
name:"工具书",
value: "100"
},
picture:{
name:"图片",
value: "52万"
},
network:{
name:"网络资源",
value: "1847万"
},
metadata:{
name:"元数据",
value: "1702万"
},
buildingTotal:{
name:"数字资源建设总量",
value: "2.21万"
},20191207
resCloseDate: {
year: "2018",
month: "12"
}
}
```
自己写了一大堆拼凑的方法,只供自己参考吧:
@Slf4j
@Controller
@RequestMapping("/bddPoolBrpdcp")
public class BddPoolBrpdcpController {
@Resource
IBddPoolBrpdcpService iBddPoolBrpdcpService;
@RequestMapping("/getAll")
@ResponseBody
public List<DataSource> bddPoolBrpdcpListAll(){
List<DataSource> datasources=new ArrayList<>();
List<BddPoolBrpdcp> bddPoolBrpdcps = iBddPoolBrpdcpService.selectList(null);
DataSource dataSource = new DataSource();
Pojo1 pojo1 = new Pojo1();
for(BddPoolBrpdcp list:bddPoolBrpdcps){
if(list.getRescode().equals("5")){
pojo1.setName(list.getResname());
// pojo1.setValue(list.getResnum());
dataSource.setNewspaper(pojo1);
datasources.add(dataSource);
}
}
return datasources;
}
/**
* localhost:8081/bddPoolBrpdcp/getAllMap
* @return
*/
@RequestMapping("/getAllMap")
@ResponseBody
public Map<String,Object> bddPoolBrpdcpListAll1() throws ParseException {
List<BddPoolBrpdcp> bddPoolBrpdcps = iBddPoolBrpdcpService.selectList(null);
DataSource dataSource = new DataSource();
Map<String,Object> map=new HashMap<>();
List<Pojo1> listdata=new ArrayList<>();
for(BddPoolBrpdcp list:bddPoolBrpdcps){
Pojo1 pojo1 = new Pojo1();
Pojo2 pojo2 = new Pojo2();
// String resname = list.getResname();
// pojo1.setName(resname);
// BigDecimal resnum = list.getResnum();
// String str= String.valueOf(resnum);
// pojo1.setValue(str);
if(list.getRescode().equals("5")){//报纸
String resname = list.getResname();
pojo1.setName(resname);
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
pojo1.setValue(str);
dataSource.setNewspaper(pojo1);
map.put("newspaper",dataSource.getNewspaper());
}else if(list.getRescode().equals("1")){//视频
String resname = list.getResname();
pojo1.setName(resname);
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
String str1;
str1=str.substring(0,2)+","+str.substring(2,str.length());
pojo1.setValue(str1);
dataSource.setVideo(pojo1);
listdata.add(dataSource.getVideo());
map.put("video",dataSource.getVideo());
}else if(list.getRescode().equals("2")){//音频
String resname = list.getResname();
pojo1.setName(resname);
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
String str1=str.substring(0,2)+","+str.substring(2,str.length());
pojo1.setValue(str1);
dataSource.setAudio(pojo1);
map.put("audio",dataSource.getAudio());
}else if(list.getRescode().equals("3")){//中文图书-->图书,472-->万
String resname = list.getResname();
pojo1.setName(resname.substring(2,resname.length()));
String str=list.getQuanunit().substring(0,1);
BigDecimal resnum = list.getResnum();
pojo1.setValue(String.valueOf(resnum)+str);
dataSource.setBook(pojo1);
map.put("book",dataSource.getBook());
}else if(list.getRescode().equals("4")){//中文期刊-->期刊,1542-->1,542万
String resname = list.getResname();
pojo1.setName(resname.substring(2,resname.length()));
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
pojo1.setValue(str.substring(0,1)+","+str.substring(1,str.length())+list.getQuanunit().substring(0,1));
dataSource.setPeriodical(pojo1);
map.put("periodical",dataSource.getPeriodical());
}else if(list.getRescode().equals("6")){//图片 张-》万张
String resname = list.getResname();
pojo1.setName(resname);
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
pojo1.setValue(str+list.getQuanunit().substring(0,1));
dataSource.setPicture(pojo1);
map.put("picture",dataSource.getPicture());
}else if(list.getRescode().equals("7")){//工具书
String resname = list.getResname();
pojo1.setName(resname);
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
pojo1.setValue(str);
dataSource.setTool(pojo1);
map.put("tool",dataSource.getTool());
}else if(list.getRescode().equals("8")){//网络资源 1847-->1,847万
String resname = list.getResname();
pojo1.setName(resname);
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
pojo1.setValue(str.substring(0,1)+","+str.substring(1,str.length())+list.getQuanunit().substring(0,1));
dataSource.setNetwork(pojo1);
map.put("network",dataSource.getNetwork());
}else if(list.getRescode().equals("9")){//元数据 1702-->1702万
String resname = list.getResname();
pojo1.setName(resname);
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
pojo1.setValue(str.substring(0,1)+","+str.substring(1,str.length())+list.getQuanunit().substring(0,1));
dataSource.setMetadata(pojo1);
map.put("metadata",dataSource.getMetadata());
}else if(list.getRescode().equals("11")){//资源总容量-->数字资源建设总量,2.21-->2.21万
pojo1.setName("数字资源建设总量");
BigDecimal resnum = list.getResnum();
String str= String.valueOf(resnum);
pojo1.setValue(str+list.getQuanunit().substring(0,1));
dataSource.setBuildingTotal(pojo1);
map.put("buildingTotal",dataSource.getBuildingTotal());
}else if(list.getRescode().equals("10")){//==================日期格式
SimpleDateFormat dateFormate = new SimpleDateFormat("yyyyMM");
String s = dateFormate.format(list.getStatime());
String year=s.substring(0,4);
String month=s.substring(4,s.length());
pojo2.setYear(year);
pojo2.setMonth(month);
dataSource.setResCloseDate(pojo2);
map.put("resCloseDate",dataSource.getResCloseDate());
}
}
return map ;
}
}
其中用到了日期转换类相关,这个值得一提:
SimpleDateFormat dateFormate = new SimpleDateFormat("yyyyMM");
String s = dateFormate.format(list.getStatime());
//将其转换为了201812的格式
String year=s.substring(0,4);//取到了2018
String month=s.substring(4,s.length());//取到了12
pojo2.setYear(year);//封装2018
pojo2.setMonth(month);//封装12
dataSource.setResCloseDate(pojo2);//再次封装
map.put("resCloseDate",dataSource.getResCloseDate());//最后封装进map
日期格式化示例:
数据库中的日期如下所示:将取得的日期设置为所需要的格式即可:即加入需要的日期是这样的:2019-11-26 18:29,则需要我们自己进行转换:
转换代码如下:参考代码如下:
/**
* 完整访问地址:http://localhost:8081/v1/api/api/testBaidu/test
* @return
* @throws ParseException
* TestBaiduEO类是转换的数据表中对应的那个类,
*/
@GetMapping("/test")
public Result<List<Map<String,Object>>> get() throws ParseException {
List<TestBaiduEO> dataList=service.test();
List<Map<String,Object>> test=new ArrayList<>();
for(TestBaiduEO tmpData:dataList){
Map<String,Object> tmpMap=new HashMap<>();
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyyMMddHHmm");
Date tmpDate=dateFormat.parse(tmpData.getTimeTitle());
//prarse中需要的是String类型的日期格式,
//format中需要的是Date的类型的转换格式;
//格式化数据
tmpMap.put("time",new SimpleDateFormat("yyyy-MM-dd HH:mm").format(tmpDate));
test.add(tmpMap);
}
return Result.ok(test);
}
推荐阅读
-
实战电商后端系统(三)—— 以vue-element-admin为基础的前端项目对接后端接口
-
找bug:前后端分离项目中,后端接口的增删改查用postman测试没问题,在前端写数据没有任何反应。
-
后端接口同时接收POJO对象(json)和基本数据类型的情况下,前端如何传值
-
javascript - 后端提供给前端restful的接口,前端怎么操作,我想要一个具体的案例,可以提供下吗?
-
后端API接口的错误信息返回规范
-
已经编写了两个网站的前端代码,在暑假里接下来是了解些后端知识,还是重点研究下js或者框架?
-
后端编写前端接口规范:
-
已经编写了两个网站的前端代码,在暑假里接下来是了解些后端知识,还是重点研究下js或者框架?
-
后端提供给前端restful的接口,前端怎么操作,我想要一个具体的案例,可以提供下吗?
-
面试官:你们前后端分离的接口规范是什么?