起源
至于此,使用restful的api已经有一段时间,除了看起来优雅外,其余反而增加了一些额外麻烦,比如:
1、form表单只支持get和post,为了支持put,delete还得写转换器
2、restful鼓励有意义的url,比如删除id为3的用户,其url在controller中很可能为:/api/user/{id},这种带变量的url导致后面的日志和权限控制很难,需要做很多判断
更加完善的方案
所以,我今天想到一种中和的方案,即只1、使用get和post,2、抛弃url变量
但是这样可能会造成url设计好不就会很乱,而且也不会比rest方便,所以现在重点来了,
- url设计原则:尽量不重复,即使重复,也要保证url+method不重复,不使用url变量,目的是是为了方便权限控制,URL第二个元素为表名,方便日志记录
- 参数设计原则:属性全为对象,这样就可以为null,设计id变量专门存主键,方便日志记录
参数封装(因为我用的是easyui,所以我的参数封装是结合easyui的数据表格来的):
package com.zs.entity.other;
import java.util.Date;
import java.util.Map;
/**张顺,2017-2-28
* 用于接收easyui数据表格的所有参数的封装
* @author it023
* @param <T>
*/
public class EasyUIAccept {
//Integer year,String sort,String order,Integer page,Integer rows
private String sort;//要排序的列名
private String order;//正序还是倒叙
private Integer page;//当前页码
private Integer rows;//每页数量
private Integer start;//开始条数,>开始条数
private Integer end;//结束条数,<=结束条数
//以下是属性条件查询字段
private String id;
//------------------
private Integer int1;
private Integer int2;
private Integer int3;
private Integer int4;
private Integer int5;
//--------
private String str1;
private String str2;
private String str3;
private String str4;
private String str5;
private String str6;
private String str7;
private String str8;
private String str9;
private String str10;
private String str11;
private String str12;
private String str13;
private String str14;
private String str15;
//---------
private Date date1;
private Date date2;
private Date date3;
private Date date4;
//----------------------
private Double d1;
private Double d2;
private Double d3;
private Double d4;
private Double d5;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSort() {
return sort;
}
public void setSort(String sort) {
this.sort = sort;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getRows() {
return rows;
}
public void setRows(Integer rows) {
this.rows = rows;
}
public Integer getInt1() {
return int1;
}
public void setInt1(Integer int1) {
this.int1 = int1;
}
public Integer getInt2() {
return int2;
}
public void setInt2(Integer int2) {
this.int2 = int2;
}
public Integer getInt3() {
return int3;
}
public void setInt3(Integer int3) {
this.int3 = int3;
}
public Integer getInt4() {
return int4;
}
public void setInt4(Integer int4) {
this.int4 = int4;
}
public Integer getInt5() {
return int5;
}
public void setInt5(Integer int5) {
this.int5 = int5;
}
public String getStr1() {
return str1;
}
public void setStr1(String str1) {
this.str1 = str1;
}
public String getStr2() {
return str2;
}
public void setStr2(String str2) {
this.str2 = str2;
}
public String getStr3() {
return str3;
}
public void setStr3(String str3) {
this.str3 = str3;
}
public String getStr4() {
return str4;
}
public void setStr4(String str4) {
this.str4 = str4;
}
public String getStr5() {
return str5;
}
public void setStr5(String str5) {
this.str5 = str5;
}
public String getStr6() {
return str6;
}
public void setStr6(String str6) {
this.str6 = str6;
}
public String getStr7() {
return str7;
}
public void setStr7(String str7) {
this.str7 = str7;
}
public String getStr8() {
return str8;
}
public void setStr8(String str8) {
this.str8 = str8;
}
public String getStr9() {
return str9;
}
public void setStr9(String str9) {
this.str9 = str9;
}
public String getStr10() {
return str10;
}
public void setStr10(String str10) {
this.str10 = str10;
}
public String getStr11() {
return str11;
}
public void setStr11(String str11) {
this.str11 = str11;
}
public String getStr12() {
return str12;
}
public void setStr12(String str12) {
this.str12 = str12;
}
public String getStr13() {
return str13;
}
public void setStr13(String str13) {
this.str13 = str13;
}
public String getStr14() {
return str14;
}
public void setStr14(String str14) {
this.str14 = str14;
}
public String getStr15() {
return str15;
}
public void setStr15(String str15) {
this.str15 = str15;
}
public Date getDate1() {
return date1;
}
public void setDate1(Date date1) {
this.date1 = date1;
}
public Date getDate2() {
return date2;
}
public void setDate2(Date date2) {
this.date2 = date2;
}
public Date getDate3() {
return date3;
}
public void setDate3(Date date3) {
this.date3 = date3;
}
public Date getDate4() {
return date4;
}
public void setDate4(Date date4) {
this.date4 = date4;
}
public Double getD1() {
return d1;
}
public void setD1(Double d1) {
this.d1 = d1;
}
public Double getD2() {
return d2;
}
public void setD2(Double d2) {
this.d2 = d2;
}
public Double getD3() {
return d3;
}
public void setD3(Double d3) {
this.d3 = d3;
}
public Double getD4() {
return d4;
}
public void setD4(Double d4) {
this.d4 = d4;
}
public Double getD5() {
return d5;
}
public void setD5(Double d5) {
this.d5 = d5;
}
public Integer getStart() {
return start;
}
public void setStart(Integer start) {
this.start = start;
}
public Integer getEnd() {
return end;
}
public void setEnd(Integer end) {
this.end = end;
}
@Override
public String toString() {
return "EasyUIAccept [sort=" + sort + ", order=" + order + ", page=" + page + ", rows=" + rows + ", start="
+ start + ", end=" + end + ", int1=" + int1 + ", int2=" + int2 + ", int3=" + int3 + ", int4=" + int4
+ ", int5=" + int5 + ", str1=" + str1 + ", str2=" + str2 + ", str3=" + str3 + ", str4=" + str4
+ ", str5=" + str5 + ", str6=" + str6 + ", str7=" + str7 + ", str8=" + str8 + ", str9=" + str9
+ ", str10=" + str10 + ", str11=" + str11 + ", str12=" + str12 + ", str13=" + str13 + ", str14=" + str14
+ ", str15=" + str15 + ", date1=" + date1 + ", date2=" + date2 + ", date3=" + date3 + ", date4=" + date4
+ ", d1=" + d1 + ", d2=" + d2 + ", d3=" + d3 + ", d4=" + d4 + ", d5=" + d5 + "]";
}
}
事项 | url | method | 参数 | 备注 |
进入页面 | /user | get | 不使用该参数 | 可以权限控制,日志只能记录有该操作 |
查询多个(分页查询) | /api/user | get | id为空,page、row有值 | 这种可以权限控制,但日志无法记录查询的目标数据,但可以记录查询条件 |
查询单个 | /api/user/get | get | id有值 | 可以权限控制,使用id进行日志记录目标数据 |
添加单个 | /api/user/add | post | 不使用该参数 | 可以权限控制,日志无法很方便记录目标数据,需要额外处理 |
修改单个 | /api/user/update | post | 不使用该参数 | 可以权限控制,日志无法很方便记录目标变量,需要额外处理 |
删除单个 | /api/user/delete | get | id有值 | 可以权限控制,使用id进行日志记录目标数据 |
导入 | /api/user/import | post | 不使用该参数 | 这种可以权限控制,但日志无法记录查询的目标数据,需要额外处理 |
导出 | /api/user/export | get | 查询多个的条件 | 这种可以权限控制,但日志无法记录查询的目标数据,但可以记录查询条件 |
结语
本次只是今天突然想到,并未实战测试,为防忘记,特此记录。