如何在数据库前减少Akka HTTP Rest API的样板?

时间:2017-07-18 08:50:47

标签: scala rest akka

假设您的域名,帐户和所有者中有两个实体。如果您正确实现了API,通常会使用以下API:

  1. POST帐户
  2. 获取帐户/ {id}
  3. PATCH帐户/ {id}
  4. GET帐户?$ filter =' city eq纽约& $ limit = 10& offset = 3
  5. 同样适用于业主。最后,您必须手动编写大量重复代码以从rest API和大量代码中提取参数,以将这些参数转换为适合您的底层数据存储的查询。

    是否有任何允许减少样板的框架或方法,类似功能的Apache Olingo版本?

1 个答案:

答案 0 :(得分: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", ...)