JSON: поле типа или динамические поля? - PullRequest
0 голосов
/ 15 сентября 2018

Какова лучшая практика при сериализации взаимоисключающих данных, которые имеют один и тот же тип (с точки зрения программирования), но с другим «значением» и другой логикой, которая должна обрабатывать это?

В качестве примера, скажем, мы хотим разработать API, который обрабатывает восстановление аккаунта. Это может быть сделано либо по электронной почте или по SMS (что отличается от логики на бэкэнде).

Таким образом, если мы хотим составить запрос к этому API, мы можем подойти к нему динамически, то есть клиент отправляет:

{"email":"my@email.com"}

или

{"phone":"+123456789"}

В качестве альтернативы, мы устанавливаем "типизированный" json, то есть :

{"type":"email", "value":"my@email.com"}

или

{"type":"phone", "value":"+123456789"}

Какой из этих двух подходов считается лучшей практикой?

1 Ответ

0 голосов
/ 15 сентября 2018

Все зависит от вашего варианта использования, но я могу дать несколько рекомендаций:

  1. Посмотрите на Typescript. Это может помочь вам в некоторых из этих случаев.
  2. JSON-схема хороша только для проверки API. Вы можете легко выразить оба ваших примера и строго подтвердить.

Лично я бы не использовал отдельное поле "тип", потому что тип уже подразумевается из существования свойства email / phone, и легче иметь дело со свойствами, которые всегда имеют один и тот же тип.

Однако, если бы я разработал API, в котором в поле могла бы появиться электронная почта или телефон, я бы вместо этого использовал для этого URI:

mailto:foo@example.org
tel:+15551234567
...