RestFul веб-сервис и транзакции базы данных - PullRequest
1 голос
/ 09 ноября 2011

В последнее время я борюсь с архитектурой Rest: p и я обычно поднимаю много проблем с ней.Допустим, у меня есть ресурс с именем «пользователь», и у этого пользователя может быть список автомобилей.Я пытаюсь вставить этого пользователя и его список автомобилей в базу данных одновременно.Я знаю, что должен сделать это с глаголом POST HTTP.Но как мне этого добиться?Должен ли я отправлять только один URL с идентификатором пользователя и каким-либо образом закодированным списком автомобилей, или я должен использовать ресурс «user» для вставки пользователя, а затем для каждого автомобиля вызывать POST URL в ресурсе с именем «car»?

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

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

Заранее спасибо.

1 Ответ

0 голосов
/ 09 ноября 2011

Есть несколько способов сделать это в зависимости от языков, которые вы используете в передней и задней частях и от того, как вы планируете отправлять эти данные. Я бы решил проблему следующим образом, если вы используете PHP и MySQL:

  1. Подготовьте данные, что-то вроде user=123&cars[]=1&cars[]=2&cars[]=3 (я использую переменную cars[], так как это отправит массив в PHP, и вы можете добиться этого, назвав свои поля ввода как cars[])
  2. Разместите это на свой бэкэнд
  3. Ваш сервер затем обработает пользователя и добавит его в базу данных, если его там нет.
  4. Я бы тогда имел таблицу, иллюстрирующую отношения между пользователем и автомобилями, что-то вроде:

    CREATE TABLE box_to_category ( user_id int (11) NOT NULL, car_id int (11) NOT NULL );

  5. В этой таблице я удалил бы все автомобили, связанные с этим пользователем, а затем добавил новые автомобили как POSTed в бэкэнд (user_id будет связан с user в таблице users и car_id будет связан с car в таблице cars)

Это простая настройка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...