java api 驗證框架設計 基於jfinal 設計api閘道器
阿新 • • 發佈:2019-01-04
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);
}
}