Я создаю API отдыха и использую json для ответных сообщений. Теперь я не просто предоставляю вызовы GET, но я также предоставлю возможность добавлять или изменять данные. Поскольку у моих данных есть отношения, у меня есть ресурсы и подресурсы, как обычно, я думаюСледуя REST к букве, я, вероятно, должен создать GET, POST, PUT & PATCH для каждого подресурса, но поскольку некоторые подресурсы настолько малы (всего несколько полей), я хочу представить их, как показано здесь, в их родительском ресурсе.
{
"mainResourceField1": "some data",
"mainResourceField2": "some other data",
"subResource": {
"keyField1": {
"field1": 2,
"field2": 3
},
"keyField2": {
"field1": 20,
"field2": 30
}
}
}
Где keyFieldn представлен данными, хранящимися в нашей базе данных. Например, «родитель», «ребенок», «отец», «мать», «дедушка» или что-то подобное. Я не хочу использовать список для своего подресурса, потому что тогда я не могу использовать json-patch в моих вызовах PATCH. Это потому, что json-patch будет выглядеть так, если поле1 в подресурсе 2 должно быть изменено.
[
{
"op": "replace",
"path": "/subResource/1/field1",
"value": 25
}
]
В то время как в случае вышеприведенного представления оно будет выглядеть так:
[
{
"op": "replace",
"path": "/subResource/keyField2/field1",
"value": 25
}
]
Поскольку REST API не имеет состояния, первый json-patch может дать неправильный результат, поскольку на стороне сервера второй (1) элемент списка может отличаться от того, который видит клиент. Новый субресурс может быть добавлен кем-то другим. Или я здесь ошибаюсь?
Но мой главный вопрос теперь: используя dotNet core v2.2, как я могу сгенерировать вышеупомянутый json без создания класса для каждого keyFieldn подресурса?