2017-07-18 58 views
1

假設您的域中有兩個實體,帳戶和所有者。如果你正確地實現一個API,你通常有這些API:如何在數據庫前減少Akka HTTP Rest API的樣板文件?

  1. POST帳戶
  2. GET帳戶/(編號)
  3. PATCH帳戶/(編號)
  4. GET賬戶$過濾器='城市eq New York'& $ limit = 10 & offset = 3

同樣適用於業主。最後,您將不得不手動編寫大量重複代碼,以便從其他API提取參數,並使用大量代碼將這些參數轉換爲適合您的基礎數據存儲的查詢。

是否有任何框架或方法允許減少樣板,Apache-Olingo的類似功能的版本?

回答

0

難道下面的一些簡單的自制方法就夠了嗎?需要填補一些空白,但與框架不同的是,您可以隨意組織自己的代碼。

def createRoute[T](entityName: String, 
       create: (T) => Route, getter: (UUID) => Route, 
       patcher: (UUID) => Route, 
       lister: (Map[String, String]) => Route) 
       (implicit unmarshaller: FromRequestUnmarshaller[T]) = { 
pathPrefix(entityName) { 
    pathEndOrSingleSlash { 
    post { 
     entity(as[T]) { e :T ⇒ create(e) } 
    } ~ 
     pathPrefix(JavaUUID) { id ⇒ 
     pathEndOrSingleSlash { 
      get { 
      getter(id) 
      } ~ patch { 
       patcher(id) 
      } 
     } 
     } 
    } 
} ~ pathPrefix(entityName + "s") { 
    parameterMap => { params: Map[String, String] => lister(params) 
    } 
} 
} 

val apiRoutes1: Route = createRoute[Account]("account", ...) ~ 
         createRoute[Owner]("owner", ...) 
+0

這是一個好的開始,但是一想抽象了ID的類型,規範的語法,提供了可選的刪除/放支持,等等等等DreamFactory在阿卡就是我們正在尋找的 – Edmondo1984

+0

CRUD-在整個域模型中使用高級REST API?對於某些情況可能是一個好主意,我仍然必須看到它們。 –

+0

簡單地添加也可以放入,刪除,加上標準參數(即Odata),以及以通用方式提供? – Edmondo1984