Как использовать json-patch с упорядоченными изменениями списка в остальные API? - PullRequest
0 голосов
/ 01 октября 2019

Я создаю 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 подресурса?

...