【问题标题】:Nesting CRUD paths in akka-http directives在 akka-http 指令中嵌套 CRUD 路径
【发布时间】:2017-07-21 08:00:01
【问题描述】:

我刚开始使用 Scala 和 Akka。我正在编写一个小型 REST 服务。我正在尝试创建以下路径:

  • GET localhost:8080/api/my-service(返回资源集合)
  • GET localhost:8080/api/my-service/6(返回指定id的资源)
  • POST localhost:8080/api/my-service(使用正文中的数据创建新资源)
  • UPDATE localhost:8080/api/my-service/4(使用正文中的数据更新请求的资源)
  • DELETE localhost:8080/api/my-service/5(删除指定id的资源)

我设法创建了嵌套路径,但是只有用于获取集合的 GET(项目符号中的第一个示例)才返回结果。路径中带有 id 的示例 GET 返回 The requested resource could not be found. 我尝试了许多不同的变体,但似乎没有任何效果。

这是我的路线的摘录:

val routes = {
    logRequestResult("my-service-api") {
        pathPrefix("api") {
            path("my-service") {
                get {
                    pathEndOrSingleSlash {
                        complete("end of the story")
                    } ~
                    pathPrefix(IntNumber) { id =>
                        complete("Id: %d".format(id))
                    }
                } ~
                (post & pathEndOrSingleSlash & entity(as[MyResource])) { myResourceBody =>
                    // do something ...
                }
            }
        }
    }
}

我已经检查了网络上的许多解决方案以及 Akka 本身的一些测试,但不知何故我在这里遗漏了一些东西。

【问题讨论】:

    标签: scala rest routes akka-http


    【解决方案1】:

    我找到了解决方案。问题出在path("my-service") 部分。我已将其更改为 pathPrefix("my-service"),现在两个 GET 路径都可以正常工作。

    所以正确的路线设置应该是这样的。

    val routes = {
        logRequestResult("my-service-api") {
            pathPrefix("api") {
                pathPrefix("my-service") {
                    get {
                        pathEndOrSingleSlash {
                            complete("end of the story")
                        } ~
                        pathPrefix(IntNumber) { id =>
                            complete("Id: %d".format(id))
                        }
                    } ~
                    (post & pathEndOrSingleSlash & entity(as[MyResource])) { myResourceBody =>
                        // do something ...
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      相关资源
      最近更新 更多