Необходимость валидации дублирующихся данных в json

REST API Метод должен принимать некий json. Стоит ли считать ошибкой валидации, если в json, который приходит на вход, происходит дублирование данных?

Пример входных данных:

{
  "id": 15,
  "id": 16
}

Должен быть только один id. Вопрос в том, что бэку как бы все равно, сколько дублей придет, он сможет корректно отработать запрос, взяв в обработку первый. С другой стороны, налицо, явная неоднозначность, потому что неясно, какой id фронт имел ввиду. Как будто бы - противоречие ограничению REST, когда запросы должны быть составлены таким образом, чтобы сервер однозначно мог понять, что за ресурс запрашивает клиент. Или ошибаюсь?


Ответы (1 шт):

Автор решения: CrazyElf

Я бы считал ошибкой, потому что да - как минимум неоднозначность.

import json

data = """
{
  "id": 15,
  "id": 16
}
"""

print(json.loads(data))

# {'id': 16}

Питон заполняет словари по правилу "последующие повторяющиеся ключи перебивают предыдущие".

На английском SO есть вопрос с ответами и обсуждениями, там есть ссылки на стандарты.

Вкратце там такие выводы:

  • Стандарт такое не запрещает, но и не рекомендует
  • Такая структура данных порождает неоднозначность поведения:
    • могут прочитаться оба ключа
    • прочитается один ключ - первый
    • прочитается один ключ - последний
    • либо вообще может выйти ошибка библиотеки, которая будет такой JSON загружать.

Считать ли неопределённость в данных ошибкой валидации - это уже на ваше усмотрение. Я бы лично считал ошибкой, потому что стандарт это конечно хорошо, но его конкретные реализации такое не любят.

→ Ссылка