JSON: "type" 字段还是动态字段?
JSON: "type" field or dynamic fields?
序列化具有相同类型(编程方面)但不同 "meaning" 和不同处理逻辑的互斥数据的最佳实践是什么?
例如,假设我们要设计一个 API 来处理帐户恢复。它可以通过电子邮件或 SMS(后端的逻辑不同)来完成。
因此,如果我们想为这个 API 编写一个请求,我们可以动态处理它,即客户端发送:
{"email":"my@email.com"}
或
{"phone":"+123456789"}
或者,我们设置一个"typesafe"json,即:
{"type":"email", "value":"my@email.com"}
或
{"type":"phone", "value":"+123456789"}
这两种方法中哪一种被认为是更好的做法?
这完全取决于您的用例,但我可以提出一些建议:
- 看看打字稿。对于其中的一些情况,它可能会对您有所帮助。
- 严格API 验证,JSON-Schema 很棒。您可以轻松表达您的两个示例并严格验证。
就我个人而言,我不会使用单独的 "type" 字段,因为类型已经从 email/phone 属性 的存在中隐含了,并且处理始终存在的属性更容易同类型
但是,如果我要设计一个 API 字段中可以出现电子邮件或 phone,我可能会为此使用 URI:
mailto:foo@example.org
tel:+15551234567
序列化具有相同类型(编程方面)但不同 "meaning" 和不同处理逻辑的互斥数据的最佳实践是什么?
例如,假设我们要设计一个 API 来处理帐户恢复。它可以通过电子邮件或 SMS(后端的逻辑不同)来完成。
因此,如果我们想为这个 API 编写一个请求,我们可以动态处理它,即客户端发送:
{"email":"my@email.com"}
或
{"phone":"+123456789"}
或者,我们设置一个"typesafe"json,即:
{"type":"email", "value":"my@email.com"}
或
{"type":"phone", "value":"+123456789"}
这两种方法中哪一种被认为是更好的做法?
这完全取决于您的用例,但我可以提出一些建议:
- 看看打字稿。对于其中的一些情况,它可能会对您有所帮助。
- 严格API 验证,JSON-Schema 很棒。您可以轻松表达您的两个示例并严格验证。
就我个人而言,我不会使用单独的 "type" 字段,因为类型已经从 email/phone 属性 的存在中隐含了,并且处理始终存在的属性更容易同类型
但是,如果我要设计一个 API 字段中可以出现电子邮件或 phone,我可能会为此使用 URI:
mailto:foo@example.org
tel:+15551234567