Я хотел бы получить отзыв о моей текущей архитектуре.
У меня есть ресурс Person, доступный через запросы GET и PUT для: / users / people / {key}. Ресурс создает и принимает объекты Person в формате JSON.
Это пример JSON, который GET /users/people/{key}
может вернуть:
{
"age":29,
"firstName":"Chiquita",
"phoneNumbers":[
{"key":"49fnfnsa0sas","number":"555-555-5555","deleted":false}
{"key":"838943bdfb-f","number":"777-777-7777","deleted":false}
]
}
Как видите, у «Person» есть несколько типичных полей, таких как «firstName» и «age», а также более сложное поле типа коллекции: «phoneNumbers».
Я пытаюсь спроектировать ресурсы так, чтобы при их обновлении клиенту нужно было только возвращать поля, которые необходимо обновить. Например, чтобы обновить только имя человека:
PUT users/people/{key}
{
"firstName":"New first name",
}
Таким образом, намного меньше ненужной информации передается взад и вперед (степени меньше в зависимости от размера ресурса)
У меня вопрос: что мне делать со свойствами списка, такими как "phoneNumbers"? Должен ли я написать более сложный код, который проверяет существующие ключи PhoneNumber в старом списке и не касается их, если на них нет ссылок, обновляет их, если есть соответствующий ключ, и добавляет их, если существует PhoneNumber с новым ключом ? Или я должен написать какой-то более простой код, который обрабатывает каждое свойство списка «phoneNumbers» как просто другое поле, которое полностью перезаписывается, если оно включено в тело запроса «PUT»? Существует ли общепринятый подход к этому, когда одна стратегия оказалась менее проблемной, чем другая? или я должен использовать свое усмотрение?
Спасибо!