在restfulapi中表示资源

在restfulapi中表示资源,rest,Rest,我有一个调查响应数据库,我正试图构建一个RESTful API来公开这些数据。API应能够返回以下信息: 现有调查 问题 答复 报告(每个调查问题每种类型答案的回答总和) 在这种情况下,我在确定资源的结构方面存在问题 对于调查、问题和回答,非常简单: GET /surveys GET /questions // filter by surveyId possible GET /responses // filter by questionId and SurveyId possible 将报告

我有一个调查响应数据库,我正试图构建一个RESTful API来公开这些数据。API应能够返回以下信息:

  • 现有调查
  • 问题
  • 答复
  • 报告(每个调查问题每种类型答案的回答总和)
  • 在这种情况下,我在确定资源的结构方面存在问题

    对于调查、问题和回答,非常简单:

    GET /surveys
    GET /questions // filter by surveyId possible
    GET /responses // filter by questionId and SurveyId possible
    
    将报告纳入这种结构的最佳方法是什么?我是否设置了单独的路线,例如:

    GET /reports/responses-by-question?surveyId=1
    
    还是将其添加为响应路径中的下一级?例如

    GET /responses/by-question?surveyId=1
    

    还是我完全弄错了,还有更好的方法?

    保持调查作为一等公民的身份,我会这样组织调查

  • 获取
    /surveys
    :获取所有调查
  • 获取
    /surveys//questions
    :获取调查的问题
  • 获取
    /surveys//questions//answers
    :获取调查问题的答案
  • 获取
    /surveys//reports
    :获取调查报告
  • 注:如果你认为报告会被多个参数过滤,你可以考虑把它作为搜索终点。
    获取
    /surveys//reports?questionId=

    如何使用surveys/1/reports获取调查的所有报告?我在考虑,但报告计算的是回答,而不是调查,因此对我来说似乎不符合逻辑。。。但也许我把这个复杂化了。我喜欢它,看起来很优雅。你知道在这种情况下如何确定一等公民的好指南吗?这更多的是关于你如何为你正在构建的服务设计你的域实体。例如,如果你正在设计一个订单管理系统,它很可能是一个
    订单
    是一等公民。另外,这里有一段视频你可能会发现很有用: