1. 程式人生 > >java api 驗證框架設計 基於jfinal 設計api閘道器

java api 驗證框架設計 基於jfinal 設計api閘道器

1、api閘道器主要工作: 統一解析引數 、檢驗資料、

2、通過繼承AbstractsApi  自動實現攔截、進行解析,檢驗。

3、整個框架設計圖

介面例項:


/**
 * 內容介面
 *
 * @author OF
 * @date 2017年12月14日
 */
@Action(path = "/content")
public class ContentApi extends ApiBase {

    /**
     * 獲取內容資訊
     */
    @ApiMapping(method = RequestMethod.GET)
    @ParamsCheck({@ParamsCheckType(name = "content_id",isNotNull = true,checkType = EmailCheck.class), @ParamsCheckType(name = "site_id")})
    public void get() {
        try {
           Record record =  Db.findFirst(Db.getSqlPara("cms.content.detail",getParamsMap()));
            rendSuccessJson(record);
        } catch (Exception e) {
            e.printStackTrace();
            rendFailedJson();
        }
    }

    /**
     * 獲取內容列表
     */
    @ApiMapping(method = RequestMethod.GET)
    @ParamsCheck(@ParamsCheckType(name = "site_id"))
    public void list() {
        try {
            rendSuccessJson( Db.find(Db.getSqlPara("cms.content.query",getParamsMap())));
        } catch (Exception e) {
            e.printStackTrace();
            rendFailedJson();
        }
    }

    /**
     * 儲存內容資訊
     */
    @ApiMapping(method = RequestMethod.POST)
    public void save() {
        try {
            rendSuccessJson("測試");
        } catch (Exception e) {
            e.printStackTrace();
            rendFailedJson();
        }
    }
}

ApiMapping  api介面對映

public @interface ApiMapping {
    //請求地址
    String url() default "";
    //是否需要驗證許可權 訪問此介面是否有許可權
    boolean isAuth() default false;
    //是否開啟
    boolean isOpen() default true;
    //是否簽名
    boolean isSign() default false;
    /**
     * 請求方法
     */
    RequestMethod method() default RequestMethod.ALL ;

    //每分鐘最大請求
    int limit() default 100;
}

ParamsCheck  檢驗欄位說明:

public @interface ParamsCheckType {
    //名稱
    String name();
    //最小長度
    int maxLength() default 0;
    //最大長度
    int minLength() default 0;
    //是否必填
    boolean isRequire() default true;
    //是否允許空值  true 可以為空,false 不為空
    boolean isNotNull() default false;
    //是否解密
    boolean isDecrypt() default false;
    //檢驗型別
    Class checkType() default DefaultCheck.class;
    //錯誤資訊
    String checkErrorMsg() default "";
    String regexp() default "";

}

checkType 檢驗型別可定義:

/**
 * 郵箱檢驗
 * @author OF
 * @version v1.0
 * @className EmailCheck
 * @date 2018/8/25
 */
public class EmailCheck extends AbstractCheck {
    @Override
    public boolean check(String email) {
        return Pattern.matches("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$", email);
    }
}