<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 一、概述 如何在新的RayOauthServer中,定義一個對外提供服務的接口呢? ## 二、基本概念 ### **接口類型** 依據響應的模式不同,可以分為同步接口和異步接口; 所謂同步接口:就是第三方系統調用的時候,立刻返回響應接口的接口; 所謂異步接口:就是第三方系統調用的時候,由于響應時間或其他因素導致不能立刻返回執行結果的接口;這種接口調用的時候,僅記錄下操作請求,后續有調度服務(平臺的另外一個容器組件,調度服務組件來執行); ## 三、從零開始開發一個接口 ### **關鍵要點** 1、每個接口都包含了一個定義controller(繼承自RayOauthApiController)和一個實現service(繼承自RayOauthApiService),且定義在一個類文件中即可; 2、定義一個apiRequestSimpleUrl變量,設定該api的簡明url(與固定前綴一起構成完整的URL); 3、接口的業務參數,都定義為@RequestHeader(required = false)和@RequestParam(required = false),使用業務校驗方法提供校驗邏輯和提示; 4、如果是同步接口,則核心業務實現在doImmediatelyWhenImSync; 5、如果是異步接口,則核心業務實現在doLaterInJobWhenImAsyn; ### **同步接口** ``` @RestController public class RayOauthApiSampleSync extends RayOauthApiController { @Autowired private RayOauthApiSampleSyncService rayOauthApiSampleService; private static final String apiRequestSimpleUrl = "/sample/sync"; @PostMapping(RayOauthServerConstants.rayOauthApiUrlPrefix + apiRequestSimpleUrl) public ResponseEntity<ResponseObject> view(@RequestHeader(required = false) String rayOauthServerAppId, @RequestHeader(required = false) String rayOauthServerTimeStamp, @RequestHeader(required = false) String rayOauthServerSignature, @RequestParam(required = false) int testParamInt, @RequestParam(required = false) String testParamString) throws Exception { return ResponseEntity.ok(rayOauthApiSampleService.response(getOauthClient(), getOauthApi(), getOauthApiRequest(), getOauthRequestParameters())); } public static class RayOauthApiSampleSyncModel extends RayModel { } @Service public static class RayOauthApiSampleSyncService extends RayOauthApiService<RayOauthApiSampleSyncModel> { @Autowired private SysLogDao sysLogDao; @Override public String simpleUrl() { return apiRequestSimpleUrl; } @Override public void validatingParameters(OauthClient oauthClient, OauthApi oauthApi, ResponseObject responseObj, RayOauthServerParameterValidator rayOauthServerParameterValidator) throws Exception { rayOauthServerParameterValidator.checkParameterIsNotEmpty("testParamString"); rayOauthServerParameterValidator.checkParameterIsInteger("testParamInt"); } @Override public ResponseObject doImmediatelyWhenImSync(OauthClient oauthClient, OauthApiRequest oauthApiRequest, RequestParameters requestParamaters) throws Exception { String testParamString = requestParamaters.getString("testParamString"); int testParamInt = requestParamaters.getInteger("testParamInt"); Specification<SysLog> spec = new Specification<SysLog>() { @Override public Predicate toPredicate(Root<SysLog> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) { List<Predicate> predicates = new ArrayList<>(); if (!StringUtil.isEmpty(testParamString)) { predicates.add(criteriaBuilder.like(root.get("infoCode"), wrapLike(testParamString))); } return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])); } }; model.setPageobject(PageProcessor.reasonablePage(sysLogDao, spec, 1, testParamInt, "", "")); return responseObj; } @Override public AsynApiResult doLaterInJobWhenImAsyn(OauthClient oauthClient, OauthApiRequest oauthApiRequest, OauthApi oauthApi, RequestParameters requestParamaters) { return null; } @Override public String apiName() { return "同步接口示范"; } @Override public long responseMode() { return ResponseMode.IMMEDIATELY_SYN; } @Override public boolean isLimitRequestRate() { return true; } } } ``` ### **異步接口** ``` @RestController public class RayOauthApiSampleAsyn extends RayOauthApiController { @Autowired private RayOauthApiSampleAsynService rayOauthApiSampleService; private static final String apiRequestSimpleUrl = "/sample/asyn"; @PostMapping(RayOauthServerConstants.rayOauthApiUrlPrefix + apiRequestSimpleUrl) public ResponseEntity<ResponseObject> view(@RequestHeader(required = false) String rayOauthServerAppId, @RequestHeader(required = false) String rayOauthServerTimeStamp, @RequestHeader(required = false) String rayOauthServerSignature, @RequestParam(required = false) int testParamInt, @RequestParam(required = false) String testParamString) throws Exception { return ResponseEntity.ok(rayOauthApiSampleService.response(getOauthClient(), getOauthApi(), getOauthApiRequest(), getOauthRequestParameters())); } public static class RayOauthApiSampleModel extends RayModel { } @Service public static class RayOauthApiSampleAsynService extends RayOauthApiService<RayOauthApiSampleModel> { @Autowired private SysLogDao sysLogDao; @Override public String simpleUrl() { return apiRequestSimpleUrl; } @Override public void validatingParameters(OauthClient oauthClient, OauthApi oauthApi, ResponseObject responseObj, RayOauthServerParameterValidator rayOauthServerParameterValidator) throws Exception { rayOauthServerParameterValidator.checkParameterIsNotEmpty("testParamString"); rayOauthServerParameterValidator.checkParameterIsInteger("testParamInt"); } @Override public ResponseObject doImmediatelyWhenImSync(OauthClient oauthClient, OauthApiRequest oauthApiRequest, RequestParameters requestParamaters) throws Exception { model.setMessage("異步操作,已經被記錄"); return responseObj; } @Override public AsynApiResult doLaterInJobWhenImAsyn(OauthClient oauthClient, OauthApiRequest oauthApiRequest, OauthApi oauthApi, RequestParameters requestParamaters) { AsynApiResult result = AsynApiResult.instance(); String testParamString = requestParamaters.getString("testParamString"); int testParamInt = requestParamaters.getInteger("testParamInt"); result.setExecutionData("testParamInt:" + testParamInt + ",testParamString:" + testParamString).setSuccess(true); return result; } @Override public String apiName() { return "異步接口示范"; } @Override public long responseMode() { return ResponseMode.LATER_ASYN; } @Override public boolean isLimitRequestRate() { return false; } } } ``` ### **數據傳遞** validatingParameters中進行參數驗證,可以通過model對象作為中介,傳遞數據到doImmediatelyWhenImSync; 舉例: ``` @Override public void validatingParameters(OauthClient oauthClient, OauthApi oauthApi, ResponseObject responseObj, RayOauthServerParameterValidator rayOauthServerParameterValidator) throws Exception { rayOauthServerParameterValidator.checkParameterIsNotEmpty("userCode"); String userCode = rayOauthServerParameterValidator.getString("userCode"); CardInfo cardinfo = cardInfoDao.findByUserCode(userCode); model.setCardinfo(cardinfo); } @Override public ResponseObject doImmediatelyWhenImSync(OauthClient oauthClient, OauthApiRequest oauthApiRequest, RequestParameters requestParamaters) throws Exception { CardInfo cardinfo = model.getCardinfo(); return responseObj; } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看