gpt4 book ai didi

grails - Grails3 Restful API URL映射原理,用于多个查询

转载 作者:行者123 更新时间:2023-12-02 15:43:16 25 4
gpt4 key购买 nike

我知道Restful API设计的基本原理。我只想知道针对多个搜索操作使用Grails3 URL映射将要做什么。

我使用配置文件rest-API创建了grails(3.3.9)应用程序。默认的UrlMapping.groovy看起来像这样。

class UrlMappings {
static mappings = {
delete "/$controller/$id(.$format)?"(action:"delete")
get "/$controller(.$format)?"(action:"index")
get "/$controller/$id(.$format)?"(action:"show")
post "/$controller(.$format)?"(action:"save")
put "/$controller/$id(.$format)?"(action:"update")
patch "/$controller/$id(.$format)?"(action:"patch")

"/"(controller: 'application', action:'index')
"500"(view: '/error')
"404"(view: '/notFound')
}
}

域类示例
class ProductSanpshot {
String id
Float price
String name
}

class Order {
String id
String status
Float totalPrice
User createdBy
List<ProductSanpshot> ProductSanpshots
String remark
Date dateCreated
}

class User {
String id
String name
}

Controller 实例
class OrderController {
def index() {
respond(Order.list())
}

def show() {
respond(Order.get(params.id))
}
}

基于满足Restful设计基本原理的URL映射集:
  • 当我访问/ order时,它将返回订单列表。
  • 当我访问/ order / 1时,它将返回ID值为1的订单明细。

  • 我的问题是:
    通常,我们只是没有获得订单的完整列表,而是使用不同的参数。
    如何映射URL以检索特定价格范围内的订单?
    正常的实现如下所示:
    class OrderController {
    def index() {
    respond(Order.list())
    }

    def show() {
    respond(Order.get(params.id))
    }

    def getByPriceRange() {
    def minPrice = params.float("minPrice")
    def maxPrice = params.float("maxPrice")
    def result = Order.findAllByTotalPriceBetween(minPrice, maxPrice)

    respond(result)
    }
    }

    我将访问order / getByPriceRange?minPrice = 100&maxPrice = 200。

    我知道这可能不会那么轻松。

    对于默认的Grails网址映射,我会收到404错误。它仅将http get映射到每个 Controller 的两个 Action 。索引并显示。而且我认为不必明确地逐个映射每个 Controller 的 Action 。
    get "/$controller(.$format)?"(action:"index")
    get "/$controller/$id(.$format)?"(action:"show")

    其他方案是:
  • 通过状态获取订单。
  • 获取订单的所有产品快照。
  • 更新订单状态
  • 更新订单备注

  • 我应该如何使用UrlMapping来通过 Restful 方式满足这些需求?

    提前致谢。

    最佳答案

    我认为您对此有误,并且该网址仍然静止。由于这是一个获取请求,因此您必须在url中发送参数。这样做有几个原因。例如,当您将该URL添加到书签时,您将获得与所需数据相同的结果,而不会出现任何问题(特别是如果该URL指向页面)。对于我的项目,我使用比利时国家银行的其余api design guide。这是我能找到的最详细的指南,我真的很喜欢。您可以看到他们正在使用limit和offset参数进行分页,并使用sort参数进行排序。在您的示例中,它更像是搜索操作。当然有很多方法,我几乎都知道它们,但是我真的很喜欢他们的方法。我使用FIQL进行搜索。您可以阅读有关“搜索/高级搜索”部分的内容。我不想使用其他参数进行搜索,因此我将其像这样使用:

    someUrl?q = minPrice = gt = 10; maxPrice = lt = 50

    找不到我喜欢的任何库,因此我编写了自己的解析器来解决该问题。无论如何,这些都是我的观点,并且我可以看到这些没有标准。希望对您有所帮助,并且可以免费提出任何问题。干杯!

    关于grails - Grails3 Restful API URL映射原理,用于多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54326542/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com