Мне нужна некоторая обратная связь по моей текущей архитектуре.
У меня есть ресурс "Человек", доступный через запросы 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" .
Я пытаюсь разработать ресурсы, чтобы при их обновлении клиенту нужно было отправлять обратно поля, которые необходимо обновить. Например, чтобы обновить только человека firstName:
PUT users/people/{key}
{
"firstName":"New first name",
}
Таким образом, гораздо меньше ненужной информации передается взад и вперед (в градусах меньше в зависимости от размера ресурса)
Мой вопрос: что мне делать с такими свойствами списка, как "phoneNumbers" . Должен ли я писать более сложный код, который проверяет существующие ключи PhoneNumber в старом списке и не трогает их, если они не указаны, обновляет их, если есть соответствующий ключ, и добавляет их, если есть номер телефона с новым ключом? Или я должен написать более простой код, который рассматривает каждое свойство списка "phoneNumbers" как просто другое поле, которое полностью перезаписывается, если оно включено в тело запроса "PUT"? Существует ли стандартный подход к этому, когда одна стратегия оказалась менее проблематичной, чем другая? или я должен использовать свое усмотрение?
Спасибо!