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"}

这两种方法中哪一种被认为是更好的做法?

这完全取决于您的用例,但我可以提出一些建议:

  1. 看看打字稿。对于其中的一些情况,它可能会对您有所帮助。
  2. 严格API 验证,JSON-Schema 很棒。您可以轻松表达您的两个示例并严格验证。

就我个人而言,我不会使用单独的 "type" 字段,因为类型已经从 email/phone 属性 的存在中隐含了,并且处理始终存在的属性更容易同类型

但是,如果我要设计一个 API 字段中可以出现电子邮件或 phone,我可能会为此使用 URI:

mailto:foo@example.org
tel:+15551234567