Разница между REST и CRUD

Я узнал REST, и он очень похож на CRUD (из того, что я прочитал о CRUD).

Я знаю, что они разные, и мне интересно, думают ли они, что они похожи, я их не понимаю.

Является ли это, что REST является «надмножеством» CRUD? Делает ли все CRUD и многое другое?

153 голоса | спросил Jesse Black 20 72011vEurope/Moscow11bEurope/MoscowSun, 20 Nov 2011 10:50:35 +0400 2011, 10:50:35

6 ответов


186

Удивительно, но я не вижу в других ответах, что я считаю реальной разницей между REST и CRUD: что каждый управляет.

CRUD означает основные операции, выполняемые в репозитории данных. Вы напрямую обрабатываете записи или объекты данных; кроме этих операций, записи являются пассивными объектами. Обычно это просто таблицы и записи базы данных.

REST, с другой стороны, работает с представлениями ресурсов, каждый из которых идентифицируется по URL-адресу. Обычно это не объекты данных, а сложные абстракции объектов.

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

Работа с комментарием не является примитивной операцией базы данных, она может иметь значительные побочные эффекты, такие как включение оповещения на исходный плакат или пересчет некоторых игровых «точек» или обновление некоторых «потоков последователей».

Кроме того, представление ресурса включает гипертекст (проверьте принцип HATEOAS ), позволяя разработчику выражать отношения между ресурсами или направлять клиента REST в рабочий процесс операции.

Короче говоря, CRUD представляет собой набор примитивных операций (в основном для баз данных и статических хранилищ данных), в то время как REST - очень высокоуровневый API-интерфейс (в основном для веб-сервисов и других «живых» систем).

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

ответил Javier 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 07:21:51 +0400 2011, 07:21:51
92

Прежде всего, оба являются просто обычными инициалами; им нечего бояться.

Теперь CRUD - это простой термин, который был сокращен, потому что это обычная функция во многих приложениях, и проще сказать CRUD . Он описывает 4 основных операции, которые вы можете выполнять для данных (или ресурса). Создать, прочитать, обновить, удалить.

REST - это именованная практика (как AJAX), а не сама технология. Он поощряет использование возможностей, которые уже давно присущи протоколу HTTP, но редко используются.

Если у вас есть URL (Uniform Resource Locator ), и вы указываете на него браузер по адресной строке, вы отправляете HTTP-запрос . Каждый HTTP-запрос содержит информацию, которую сервер может использовать, чтобы узнать, какой HTTP-ответ отправить обратно клиенту, который выдал запрос.

Каждый запрос содержит URL-адрес, поэтому сервер знает, какой ресурс вы хотите получить доступ, но он также может содержать метод . Метод описывает, что делать с этим ресурсом.

Но эта концепция «метода» не использовалась очень часто.

Обычно люди просто ссылаются на страницы с помощью метода GET и выпускают any тип обновлений (удаление, вставки, обновления) с помощью метода POST.

И из-за этого вы не можете рассматривать один ресурс (URL) как истинный ресурс сам по себе. У вас должны быть отдельные URL-адреса для удаления, вставки или обновления одного и того же ресурса. Например:

http://...com/posts/create- POST request  -> Goes to posts.create() method in the server
http://...com/posts/1/show- GET request  -> Goes to posts.show(1) method in the server
http://...com/posts/1/delete - POST request  -> Goes to posts.delete(1) method in the server
http://...com/posts/1/edit- POST request  -> Goes to posts.edit(1) method in the server

С помощью REST вы создаете формы умнее , потому что они используют другие методы HTTP в стороне от POST и программируют ваш сервер, чтобы иметь возможность различать методы , а не только URLS. Так, например:

http://...com/posts - POST request  -> Goes to posts.create() method in the server
http://...com/posts/1 - GET request  -> Goes to posts.show(1) method in the server
http://...com/posts/1 - DELETE request  -> Goes to posts.delete(1) method in the server
http://...com/posts/1 - PUT request  -> Goes to posts.edit(1) method in the server

Помните, что один URL-адрес описывает один ресурс. Единственный пост - это единственный ресурс. С помощью REST вы обрабатываете ресурсы так, как они предназначены для лечения. Вы сообщаете серверу, какой ресурс вы хотите обрабатывать, и как его обрабатывать.

В «RESTful architecture» есть много других функций, о которых вы можете прочитать в Википедии, других статьях или книгах, если вам интересно. С другой стороны, для самого CRUD не так уж много.

ответил Yam Marcovic 20 72011vEurope/Moscow11bEurope/MoscowSun, 20 Nov 2011 11:51:39 +0400 2011, 11:51:39
18

REST означает «передачу репрезентативного состояния», что означает, что все это связано с передачей и изменением состояния какого-либо ресурса в системе.

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

С другой стороны, CRUD является мнемоником для общих операций, необходимых для данных в базе данных: Create Retrieve Update Delete. Но это действительно не глубже, чем это.

Итак, это ответ на ваш вопрос, но я расскажу об общей ошибке, которую я вижу, когда REST и CRUD обсуждаются вместе. Многие разработчики хотят напрямую сопоставлять REST с CRUD, поскольку REST через HTTP предоставляет GET PUT POST и DELETE, тогда как CRUD обеспечивает CREATE RETRIEVE UPDATE DELETE. Естественно хотеть отображать глаголы REST непосредственно в CRUD-операции.

Однако HTTP использует стиль «создать или обновить», в то время как CRUD отделяет создание и обновление. Это делает невозможным (!) Сделать чистое общее отображение между двумя (!)

GET и DELETE легко ... GET === RETRIEVE и DELETE === DELETE.

Но по спецификации HTTP PUT на самом деле создает и обновляет:

  • Используйте PUT для создания совершенно нового объекта, когда вы все знаете об этом, включая его идентификатор

  • Используйте PUT для обновления объекта (обычно с полным представлением объекта)

POST - это «обрабатывающий» глагол и считается «добавочным» глаголом:

  • Используйте POST для добавления нового объекта в коллекцию, то есть создайте новый объект

  • POST также используется, когда ни один из других глаголов не подходит, поскольку спецификация HTTP определяет его как глагол обработки данных

  • Если ваша команда повесилась на POST, помните, что весь WWW был построен на GET и POST;)

Итак, хотя есть сходство между REST и CRUD, ошибка, которую я вижу большинству команд, заключается в том, чтобы сделать эквивалентность между ними. Команда действительно должна быть осторожной при определении REST API, чтобы не слишком зависеть от мнемоники CRUD, потому что REST как практика действительно имеет много дополнительной сложности, которая не отображает чисто CRUD.

ответил Rob 9 Maypm14 2014, 18:58:14
6

CRUD определяет минимальный набор основных глаголов хранения для чтения и записи данных: создание, чтение, обновление и удаление. Затем вы можете создавать другие операции, объединяя их. Обычно это считается операциями с базой данных, но то, что считается базой данных, является произвольным (например, может быть реляционной СУБД, но также может быть файлами YAML).

REST - это «архитектурный стиль», который обычно включает операции CRUD и другие операции более высокого уровня, которые должны выполняться по некоторой концепции «ресурсов» (произвольно, но это объекты в вашем приложении). REST имеет кучу ограничений , которые делают его интересным (и особенно хорошо связанным с HTTP).

Интерфейс REST может, но не обязательно, показывать все операции CRUD на конкретном ресурсе. То, что доступно в интерфейсе REST, является произвольным и может изменяться из-за системных разрешений, соображений пользовательского интерфейса и того, как это было в тот день, когда был спроектирован и создан интерфейс. Большие дни приводят к более минималистским интерфейсам, как правило, хотя может быть и наоборот.

ответил Dan Rosenstark 20 72011vEurope/Moscow11bEurope/MoscowSun, 20 Nov 2011 11:02:33 +0400 2011, 11:02:33
2

CRUD

  • CRUD - это четыре основных типа команд SQL: создание, чтение, обновление и удаление
  • Большинство приложений имеют некоторую функцию CRUD
  • Приложение CRUD - это приложение, которое использует формы для получения данных в базу данных и из нее.

ОТДЕЛ

  • REST означает перенос репрезентативного состояния (иногда это произносится как «REST»)

  • Он опирается на безвизовый, клиент-серверный, кэшируемый протокол связи - и практически во всех случаях используется протокол HTTP

  • REST - это стиль архитектуры для проектирования сетевых приложений.

ответил Vayodya Tamari 5 FebruaryEurope/MoscowbFri, 05 Feb 2016 15:20:33 +0300000000pmFri, 05 Feb 2016 15:20:33 +030016 2016, 15:20:33
1

REST - это что-то вроде веб-страницы для машин, которую они могут просматривать, в то время как CRUD - это что-то вроде SOAP, который тесно связан с его клиентами. Это основные различия. Ofc. они похожи на поверхности, но CRUD описывает основные манипуляции с объектами, тогда как REST может описывать интерфейс любого приложения. Другое отличие, что REST может использовать больше 4 HTTP-методов. Это был бы очень длинный ответ, если бы я хотел собрать все различия, если вы проверите вопросы о REST и SOAP, тогда вы найдете большинство из них.

Я думаю, что запутанный REST с CRUD - очень распространенная ошибка, и причина в том, что разработчики не имеют времени, чтобы подробно прочитать о REST. Они просто хотят использовать эту технологию - не понимая ее - на основе ограниченного примера стиля CRUD, написанного аналогичными разработчиками. Подавляющее большинство примеров и учебников отражают серьезную нехватку знаний. Символом этого является сопоставление ресурсов REST с объектами и HTTP-методами с CRUD-операциями этих объектов и использование REST без гиперссылок. С помощью REST вы сопоставляете гиперссылки (включая ссылки с методами POST /PUT /DELETE /PATCH) для своих операций, и вы определяете операцию на стороне клиента, проверяя отношение ссылки (обычно для API). Если клиент REST не знает, что такое связь ссылок, и знает только HTTP-методы и, возможно, некоторые шаблоны URI, то это не клиент REST, а CRUD на HTTP-клиенте. Еще одна распространенная ошибка, что клиент REST - одностраничное javascript-приложение, работающее в браузере. Конечно, вы можете реализовать такого клиента, но REST был предназначен главным образом для автоматических клиентов (серверных приложений, написанных разработчиками, которых вы даже не знаете), а не для ручных клиентов (написанных вами управляемых браузером приложений). Наличие только одного клиента браузера может быть признаком того, что вам не нужен REST, и вы просто переработали проект. В этих случаях CRUD API является жизнеспособным решением, и разработчики называют эти CRUD API как REST, потому что они не знают разницы.

ответил inf3rno 30 +03002016-10-30T20:47:56+03:00312016bEurope/MoscowSun, 30 Oct 2016 20:47:56 +0300 2016, 20:47:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132