Pull to refresh

Comments 13

Давайте сразу поймем отличия: "В чем разница между PUT и PATCH?". Этот вопрос вы также можете часто слышать на собеседовании.

Справедливости ради, разницы нет никакой. Patch, put, get, post и другие - просто один из параметров запроса, сервер волен обрабатывать как ему вздумается. Поэтому правильный ответ - зависит от реализации сервера.

В том же json-rpc вообще все запросы - POST

вздумать он действительно может, но разница есть - она в rfc описана. И желательно понимать как это должно работать

справедливости ради, согласно протоколу, браузер может сам повторить гет запрос, поэтому он должен быть идемпотентным.

браузер может сам повторить гет запрос, поэтому он должен быть идемпотентным

o_O какая связь? Запрос, поступивший на сервер впервые, может обрабатываться не так, как поступивший повторно. Идемпотентность результата запроса не требует того же от процесса получения этого результата.

Что происходит за кулисами: Запрос: «Обнови запись с ID=789, заменив старые данные на эти».

Вот ни разу не догма. За кулисами может быть, например, такое:

  • Удали старую версию записи с ID=789, и создай вместо неё новую, с ID=789 и новыми данными.

Или такое:

  • Создай новую запись с ID=789, новыми данными, и установи значение поля version на единицу больше максимального для уже имеющихся записей с ID=789.

И даже такое:

  • Установи у имеющейся записи с ID=789 значение поля actual=FALSE, и cоздай новую запись с ID=789, новыми данными и actual = TRUE.

Аналогично - для DELETE.

В общем, маппинг операции на фронте на операцию на бэке - он ни разу не 1:1 (хотя может и оказаться таковым). И маппинг операции на бэке на операцию в СУБД тоже не 1:1.

PS. Но вообще - сплошная вода, тянет разве что на введение к статье на заявленную тему...

Вы сейчас как будто MVCC описали. То есть в принципе огромное число сервисов с Постгресом под ними реально так и работают)

Просто мысли вслух по поводу круда (не статьи), если позволите.

Мы можем создать элемент, прочитать его, обновить и удалить. А как насчёт получить список элементов?
В этом месте говорят: легко! Это тоже Read, но не элемента, а коллекции.
Но по такой логике создание и удаление элемента — это просто обновление коллекции, верно. Тогда зачем в C.R.U.D нужны C и D?

А как насчёт получить список элементов?

Для получения списка надо прочитать каждый из элементов этого списка.

Это тоже Read, но не элемента, а коллекции.

А не надо слушать кого попало. Различайте чтение элемента и организацию цикла по чтению каждого из элементов. Цикл и его организация (включая и накопление результата) - с точки зрения процесса чтения элемента штука совершенно внешняя, чуждая, инородная, и даже как бы ненужная.

по такой логике создание и удаление элемента — это просто обновление коллекции, верно

Совершенно очевидно, что это неверно.

Для получения списка надо прочитать каждый из элементов этого списка.

Я имею в виду самый обычный листинг. Чтобы получить список файлов в папке, не обязательно же читать их содержимое?

Совершенно очевидно, что это неверно.

Understandable, have a nice day.

Я имею в виду самый обычный листинг. Чтобы получить список файлов в папке, не обязательно же читать их содержимое?

Чтобы получить список файлов в папке ака листинг вашим методом, файлам вообще не требуется существовать. Достаточно, чтобы существовали записи о файлах в файле папки. И обращаетесь вы вовсе не к файлам, а к файлу папки. Метаданные файла - не являются составной частью файла.

Я вас не понимаю.

Пишу: для получения списка элементов (например, имена файлов или список урлов, ничего не писал про их содержимое!), нужно прочитать объект-коллекцию (например, директорию), вы говорите, что это штука инородная и чуждая.

А потом говорите, что чтобы получить метаданные файла нужно прочитать файл директории.

Ну как так?

Давайте вернёмся к исходной формулировке ситуации.

Мы можем создать элемент, прочитать его, обновить и удалить. А как насчёт получить список элементов?В этом месте говорят: легко! Это тоже Read, но не элемента, а коллекции.

Что такое коллекция в данном случае? в вашем понимании.

Если ориентироваться на вашу (странную) фразу "Это тоже Read, но не элемента, а коллекции", то создаётся весьма странная ситуация - коллекция, по вашему мнению, не имеет никакого отношения к элементу, в неё входящему, и наоборот. Изменение элемента - на коллекции никак не отразится. Очевидно, что это не так, и изменяющая операция над элементом изменяет и коллекцию. И, соответственно, чтение коллекции и чтение элементов коллекции - не одно и то же.

Вам требуется получить некий список. То есть набор записей, каждая из которых содержит значение некоего (возможно, идентифицирующего, но в общем случае необязательно, и даже, возможно, неуникального или пустого) свойства одного экземпляра (элемента) этого списка. Расскажите, как вы намерены получить значение этого свойства, не обращаясь к самому элементу? Коллекция содержит ссылки на элементы в форме идентифицирующих значений атрибутов, но за любым другим атрибутом придётся лезть в соответствующий экземпляр.

Как я говорил выше, то, что вам нужно, с точки зрения экземпляра сущности Элемент Коллекции есть внешнее и в области его видимости несуществующее. А снаружи это есть метаданные коллекции экземпляров.

API — это мост между пользователем и системой,

Каким еще нафиг пользователем? API — это мост для общения между двумя системами.

Именно эти операции [CRUD] лежат в основе всей архитектуры веб-приложений (соцсетей, интернет-магазинов, банковских приложений), API и баз данных.

Я написал за свою жизнь более десятка разных API и это никогда не был CRUD. Вы бы полегче с обобщениями, в сложных системах CRUD занимает сто пятое место и общение с пользователем вообще — это то, что можно безболезненно доверить джунам и ллмкам.

Sign up to leave a comment.

Articles