【问题标题】:how to Restfully implement joins via a query string如何通过查询字符串轻松实现连接
【发布时间】:2015-01-27 22:49:27
【问题描述】:

我们的堆栈目前使用 mongoose 作为 ODBM,我想知道我应该如何实现 RESTFUL 请求来确定是否填充了外键(即外键 _id 属性被替换为整个文档或部分来自另一个集合的文档)。

我知道我可以发送类似的东西

?populate=CollectionName&populateFields=fieldsnames`

通过一个查询字符串,但对我来说这似乎很老套,我想知道在这种情况下什么被认为是标准/最佳实践

【问题讨论】:

    标签: mongodb mongoose query-string restful-url


    【解决方案1】:

    MongoDb 没有连接。如果关联数据足够小,建议嵌入文档。 如果你采用这种方法,那么你可以执行这个简单的查询来检查嵌入的文档字段是否是一个文档。

    0 < db.products.count({_id : 3, rebateProgram : { $type : 3} })
    

    在猫鼬中,我认为是

    0 < productModel.find({}).where({_id : 3, rebateProgram : { $type : 3} }).count()
    

    rebateProgram : {$type : 3} 表示仅匹配带有嵌入文档的 rebateProgram 字段。 3 是嵌入文档的 BSON 类型。

    RESTful URL

    用于检查文档属性的 restful url 可能如下所示。

    请求将是一个 GET,因为您正在检索一个值而不是修改任何数据。

    GET: /??/:collectionName/:documentId/action
    

    示例:

    请求:

    GET: /api/products/3/status?hasObject=rebateProgram
    

    回复:

    {
        id: 3,
        hasObject : { rebateProgram : true },
        success : true,
        errMsg : ""
    }
    

    但是,如果它始终是您要检查的同一字段,请在响应中包含嵌入字段的状态。 像这样。 示例:

    请求:

    GET: /api/products/3/status
    

    回复:

    {
        id: 3,
        hasValidRebateProgram : true,
        success : true,
        errMsg : ""
    }
    

    更多信息:

    【讨论】:

      【解决方案2】:

      在我看来,允许允许客户端添加或删除资源端点返回的字段的查询参数并不难。我建议阅读this article 了解 RESTful 最佳实践。所以你的 URL 看起来像这样:

      假设您在谈论 GET 路线

      GET /users/:user_id?fields=field1,some_other_field
      

      您不需要在 RESTful URL 中表示您的数据库。从客户的角度思考。如果您不设计数据库,对您有什么意义?我认为 API 应该公开行为,而不是数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 2010-09-15
        • 2020-02-22
        • 1970-01-01
        相关资源
        最近更新 更多