Javascript 使用对象的JSON对象响应api端点

Javascript 使用对象的JSON对象响应api端点,javascript,node.js,rest,express,Javascript,Node.js,Rest,Express,这是我的第一个nodeJS应用程序。我一直在研究RESTfulAPI最佳实践,但似乎没有一个能直接解决我的问题 以下是我的数据保存在数据库中的格式: '1212': { name: 'Plasma Blaster', id: 1212, price: 7000, quantity: 10, minimum: false, date: new Date().toISOString().replace('T', ' ').substr(0, 19),

这是我的第一个nodeJS应用程序。我一直在研究RESTfulAPI最佳实践,但似乎没有一个能直接解决我的问题

以下是我的数据保存在数据库中的格式:

'1212': {
    name: 'Plasma Blaster',
    id: 1212,
    price: 7000,
    quantity: 10,
    minimum: false,
    date: new Date().toISOString().replace('T', ' ').substr(0, 19),
    image: 'http://www.img.com/image.jpeg',
},
每个项目都以其唯一id的字符串作为键保存。顺便说一句,我使用简单的数据结构作为db

向端点/api/v1/store/products发出的get请求返回结果:

{
"completed": true,
"message": "get products sucessful",
"products": {
    "1370": {
        "name": "DH-17 blaster pistol",
        "id": 1370,
        "price": 600,
        "quantity": 10,
        "minimum": "false",
        "date": "2018-11-05 13:29",
        "image": "http://www.img.com/image.jpeg"
    },
    "1473": {
        "name": "C-22 fragmentation grenade",
        "id": 1473,
        "price": 200,
        "quantity": 16,
        "minimum": "false",
        "date": "2018-11-05 13:32",
        "image": "http://www.img.com/image.jpeg"
    },
    "8385": {
        "name": "Neon-Blue Crystal Lightsaber",
        "id": 8385,
        "price": 200,
        "quantity": 1,
        "minimum": "true",
        "date": "2018-11-05 13:35",
        "image": "http://www.img.com/image.jpeg"
    },
    "0836": {
        "name": "Treppus-2 vibroblade",
        "id": 836,
        "price": 2000,
        "quantity": 1,
        "minimum": "true",
        "date": "2018-11-05 13:36",
        "image": "http://www.img.com/image.jpeg"
    }
}
}


我需要知道这是否是一个可接受的结构。我以前使用过的Api响应结构是对象数组。我也非常感谢您帮助我更好地格式化它。

对于JSON资源的“可接受结构”没有太多指导,大多数人只关心您是否一致


也就是说,我认为您的“complete”和“message”键并没有添加太多内容,因为根据HTTP响应代码,它们应该是显而易见的(例如200 Success)。客户端可能会发现使用数组或对象稍微容易一些,但这不是一个问题

可接受的结构取决于使用API的客户端需要什么,有些人称之为“契约”。如果你需要用我推荐的工具来定义它


特别是关于您提到的json,对于json的
products
键来说,对象数组确实更有意义,但这只是因为数组是最简单的结构。如果您正在开发的产品需要一个数据结构,您需要在该结构上根据产品id快速检索产品,那么您的结构会更好。

谢谢Paul,我将删除您建议的部分。我考虑过使用数组,我认为即使Mongodb查询也会返回一个对象数组。但由于我在处理数据结构,我了解到查询对象在时间复杂度方面会更好,因为我可以只做对象[id]而不是数组也就是说,这实际上取决于您的用例。如果您通常将它们显示为一个列表,那么数组是有意义的。如果您要在客户机上按ID正常搜索它们,那么对象是有意义的。如果两者都需要,我甚至做了一个客户端索引,其中数据在数组中,然后我有一个对象,其中键作为ID,值作为项的数组位置。哇,我怎么会想到这个!实际上,该端点的结果很可能会在客户端的一个表中进行总结。然后,可以从表中提取关于单个对象的完整信息(这将由object[id]后端完成)。我认为这种结构可能是实现这一点的最佳方式。您的想法好吗?@Mudi当然,对于您的用例,我可能会从一个项目数组构建表。如果不需要在客户机上按ID查找它(听起来像是在谈论对详细信息端点的单独请求,如
/api/item/:itemId
),只需将ID作为数据嵌入行中的某个位置,并让客户机单独获取它。如果您想在客户机上执行查找,那么只需在构建表时构建我描述的索引,这样客户机就不必多次迭代(如果您担心的话)。谢谢Graciano,我会查看您的建议。你们说到点子上了,正如你们所说的,objects肯定会更好,因为每个产品都会主要通过id来查找。