Удаление с помощью FK с использованием RESTful API design - PullRequest
0 голосов
/ 16 мая 2018

У меня есть таблица с именем itemlink, которая содержит три столбца id, parentId, childId

Согласно этой статье , если я хочу получить все ссылки на элементы, тоЯ бы позвонил GET /itemlink, и если я хочу получить все ссылки на элементы, принадлежащие определенному родителю, я бы добавил в строку запроса GET /itemlink?parentId=5, и этот параметр является необязательным

Но что, если яЯ имею в виду удаление, и я хочу дать клиенту возможность удалить все ссылки на элементы, которые принадлежат определенному родителю, я не чувствую себя комфортно, имея URL, который удалит все ссылки на элементы DEL /itemlink, который звучит не лучшим образом (илибезопасно) практиковаться, так каков наилучший способ реализовать это?

Один из вариантов, который я могу придумать, чтобы заставить клиента добавить в parentId при запросе удаления, должен иметь конечную точку, такую ​​как /itemlink/parent/{id}но нарушает ли это правила правильного дизайна REST?

1 Ответ

0 голосов
/ 16 мая 2018

Ресурсы & Подресурсы участвуют в вашем деле. отношения между родителями и детьми. IMO, связь (itemlink) не должна быть представлена ​​как ресурс в REST API, что на самом деле является путаницей в вашем случае.

Я объясню это с примером использования, похожим на ваш.

Customers - Parent table 
Orders - Child table
LinkId - CustomerId - OrderId - Link table

В этом случае apis должен быть как

/customers/$customer_id/orders - (GET) - Get all orders of the customer
/customers/$customer_id/orders/$order_id - (GET) - Get a particular order of the customer
/customers/$customer_id/orders - (POST) - Create a new order for the customer
/customers/$customer_id/orders/$order_id - (PUT) - Edit a particular order of the customer
/customers/$customer_id/orders/$order_id - (DELETE) - Delete all the orders of the customer

Что касается удаления отношения FK, когда клиент закрывает свой счет, все заказы должны быть отброшены, что произойдет через /customers/$customer_id - HTTP DELETE

...