Информация об изменениях

Сообщение Re: Web API несколько функций от 05.04.2019 14:21

Изменено 05.04.2019 14:23 ·

Re: Web API несколько функций
Здравствуйте, CyberRussia, Вы писали:

CR>Но я не уверен, что такой подход правильный.

Обычно рекомендация что в урле у тебя используются сущности, а не действия. И самое главное — учти, что Web API разрабатывается с т.з. распределённой системы.
Т.е. делаешь ты "/objects/createinindex" — и связь оборвалась — как клиент узнает — сработал ли вызов или нет? Должен он повторить операцию или нет? Думай об идемпотентных операциях.
Что происходит при коллизиях: два клиента добавляют что-то в позицию X — кто-то из них должен обломаться? Или оба отработать, один перезапишет другого? Или оба вставятся один за другим? Можешь посмотреть в сторону Operational Transformations
Например, самый простой вариант если следовать соглашениям на именование REST, то скорее всего будет как-то так:
POST /objects?position=X — если X=0 — значит в начало, X=n — на n-ную позицию (существущие эл-ты сдвигаются к концу). Параметр отсутствует — в конец.
Либо можно указывать позицию относительно существующего объекта с данным id: POST /objects?afterId=abc POST /objects?beforeId=xyz
Re: Web API несколько функций
Здравствуйте, CyberRussia, Вы писали:

CR>Но я не уверен, что такой подход правильный.

Обычно рекомендация что в урле у тебя используются сущности, а не действия. И самое главное — учти, что Web API разрабатывается с т.з. распределённой системы.
Т.е. делаешь ты "/objects/createinindex" — и связь оборвалась — как клиент узнает — сработал ли вызов или нет? Должен он повторить операцию или нет? Думай об идемпотентных операциях.
Что происходит при коллизиях: два клиента добавляют что-то в позицию X — кто-то из них должен обломаться? Или оба отработать, один перезапишет другого? Или оба вставятся один за другим? Можешь посмотреть в сторону Operational Transformations
Например, самый простой вариант если следовать соглашениям на именование REST, то скорее всего будет как-то так:
POST /objects?position=X — если X=0 — значит в начало, X=n — на n-ную позицию (существущие эл-ты сдвигаются к концу). Параметр отсутствует — в конец.
Либо можно указывать позицию относительно существующего объекта с данным id: POST /objects?afterId=abc POST /objects?beforeId=xyz.