背景信息
在我正在开发的产品中,我们有很多枚举值来存储一段数据的“类型”。例如(这个东西存在于微 Controller 的 C 中):
typedef enum
{
Temperature = 100,
InputVoltage = 200,
AverageVoltage = 201,
Current = 300,
} ReadingType_t;
这使我们能够一般地处理“读数”,有点像这样:
typedef struct
{
ReadingType_t type;
sint32_t value;
} Reading_t;
Reading_t readings[5];
readings[0].type = Temperature;
readings[0].value = 25; // in degrees C
readings[1].type = InputVoltage;
readings[1].value = 4321; // in milliVolts
问题
我正在尝试指定一个基于 JSON 的 API 来输出这种形式的信息。我有的一些可能的格式包括:
readings = [
{
"type": "Temperature",
"value": 25
},
{
"type": "InputVoltage",
"value": 4321,
}
]
或
readings = [
{
"type": 100,
"value": 25
},
{
"type": 200,
"value": 4321,
}
]
或
readings = [
{
"type": {
"code": 100,
"name": "Temperature"
},
"value": 25
},
{
"type": {
"code": 200,
"name": "InputVoltage"
},
"value": 4321,
}
]
假设
我假设 API 生成 JSON。
我假设 API 将由 Javascript 客户端应用程序使用和/或直接用于调试。
问题
我的问题是:
- 我应该包括枚举“code”、“title”还是两者都包括?是否有公认的做法?
- 如果我包含“标题”,它应该采用常规语言格式吗?即我应该使用“InputVoltage”还是“Input Voltage”?
- 我应该如何支持国际化与消费便利性? IE。:
- 如果我发送数字“代码”,则不会混淆类型是什么,但必须使用查找表来获取人类可用的字符串(使用不同的表进行国际化)
- 如果我以常规语言格式发送字符串“title”,API 必须执行国际化(这很好)但是我们不能根据该值执行任何逻辑(因为“title”会根据语言而变化,而代码不会)。
最佳答案
我强烈建议不要在输出中包含代码和名称。这是多余的,只要您想要支持数据的读/写,它就会将您与有效的代码和名称联系在一起。
我建议将名称输出到文件中。该代码是将来可能会更改的实现细节。今天你有一个 enum
,明天你可能有一个哈希表。但名称是很可能不会更改的有意义的信息。
关于javascript - 我的 API 是否应该同时包含枚举的数字和字符串表示形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23378882/