rest - 嵌套的 RESTful 资源

标签 rest grails

我正在使用 Grails 在 2.3 中引入的对 REST 的支持。我的应用程序包括以下域类:

@Resource(formats=['json', 'xml'])
class Sensor {
    String name
    static hasMany = [metrics: Metric]
}

@Resource(formats=['json', 'xml'])
class Metric {

    String name
    String value

    static belongsTo = [sensor: Sensor]
}

而在 UrlMappings.groovy我定义了以下嵌套的 RESTful URL 映射:
"/api/sensors"(resources: 'sensor') {
    "/metrics"(resources: "metric")
}

如果我导航到 URL /api/sensors/1/metrics我希望回复显示所有 MetricSensor 关联的实例ID 为 1,但实际上它返回所有 Metric实例(最多 10 个)
  • 是否有一个 URL 只会返回 Metric与特定 Sensor 相关联的实例实例(没有实现我自己的 Controller )?
  • 有没有办法覆盖 10 个结果的默认限制(不向请求添加 max 参数)?
  • 最佳答案

    好像没那么简单。 :) 如果运行这个命令,我们可以得到一个生动的画面:

    grails url-mapping-report
    

    查看
    Controller: metric
     |   GET    | /api/sensors/${sensorId}/metrics           | Action: index  |
     |   GET    | /api/sensors/${sensorId}/metrics/create    | Action: create |
     |   POST   | /api/sensors/${sensorId}/metrics           | Action: save   |
     |   GET    | /api/sensors/${sensorId}/metrics/${id}     | Action: show   |
     |   GET    | /api/sensors/${sensorId}/metrics/${id}/edit| Action: edit   |
     |   PUT    | /api/sensors/${sensorId}/metrics/${id}     | Action: update |
     |  DELETE  | /api/sensors/${sensorId}/metrics/${id}     | Action: delete |
    

    所以,我们至少需要一个 MetricController继承RestfulController并覆盖 index()Metric 进行额外检查和返回列表基于 Sensor如下所示:
    class MetricController extends RestfulController<Metric> {
        static responseFormats = ['json', 'xml']
    
        MetricController() {
            super(Metric)
        }
    
        @Override
        def index() {
            def sensorId = params.sensorId
            respond Metric.where {
                sensor.id == sensorId
            }.list()
        }
    }
    

    以上更改将为 /api/sensors/1/metrics 提供预期结果(包括对分页结果的限制)打的时候。

    关于rest - 嵌套的 RESTful 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22675247/

    相关文章:

    ruby-on-rails - API 的 URL 设计

    java - 使用 JAVA 连接到 JIRA REST API 时握手失败

    java - 基于 IBM MQ 的 Web 服务

    grails - Grails LIQUIBASE DB-DIFF产生错误

    grails - 调试 Grails 3.x 应用程序

    java - chalice 。 Hibernate 延迟加载多个对象

    azure - 如何使用 Azure 逻辑应用请求 OAUTH 访问 token ?

    java - 如何使用 REST 以编程方式从 apache archiva 下载单个工件?

    jquery-ui - 使用 ajax 创建 Grail Jquery 模态窗口和表单发布?

    grails - 双向关联查询问题:如何使用GORM查询拥有类的所有者?