針對多終端的前置系統(app,h5, api)

多終端前置系統

項目源代碼地址git

在工做中咱們常常遇到爲app,h5, outside api 開發不一樣的前置系統,每每同一個業務邏輯須要開發三種api的形式,爲何要這樣呢?
它們只是報文格式,加解密需求,會話形式不一樣等等而已。github

因而開發了這個多終端前置系統,採用微內核模式封裝上述場景中通用流程,將其中一部分用接口開放出來。web

其中使用的開源框架以下:
使用springboot作集成,使用netty作web server,使用hystrix作熔斷器,使用redis作分佈式session,使用jmx作動態配置。
整個框架只作了最少的事情,其餘交給它將來的使用者們。redis

順便說一下:
使用者分爲兩種角色, 框架的二次開發者和具體業務邏輯開發者。spring

二次開發者須要關注通用流程中的開放接口,它們在:net.multi.terminal.bff.corejson

具體業務邏輯開發者須要關心如下路徑,它們是:net.multi.terminal.bff.service、net.multi.terminal.bff.modelapi

其中net.multi.terminal.bff.model是業務通用模型,它們是:請求,響應,會話 和 客戶端上下文springboot

前三個淺而易見,而客戶端上下文是什麼?咱們將不一樣的終端定義成不一樣的客戶端,並給它一個固定的ID,它所使用的個性化實現類被寫在multi-terminal-bff/src/main/resources/client-setting.jsonsession

[
  {
    "clientId": "1",
    "serializerName":"AppMsgSerializer",
    "apiCodecName":"EmptyApiCodec",
    "sessionInjectorName":"AppSessionInjector",
    "rspContentType":"text/plain;charset=UTF-8"
  },
  {
    "clientId": "2",
    "serializerName":"FormJsonMsgSerializer",
    "apiCodecName":"EmptyApiCodec",
    "sessionInjectorName":"WebSessionInjector",
    "rspContentType":"application/json;charset=UTF-8"
  },
  {
    "clientId": "3",
    "serializerName":"DoubleJsonMsgSerializer",
    "apiCodecName":"EmptyApiCodec",
    "sessionInjectorName":"WebSessionInjector",
    "rspContentType":"application/json;charset=UTF-8"
  }
]

內容以下,很是通俗易懂,只要你認真看了這個類net.multi.terminal.bff.web.HttpApiHanler
沒錯,它描述了整個請求、處理、響應的過程。app

好了就寫到這吧,更多細節在代碼裏面,若是你在這個版本上有新的擴展請貢獻出來。

相關文章
相關標籤/搜索