2016-11-23 2 views
0

Просто у меня есть AngularJs client. Он хочет использовать каждый API, используя архитектуру CRUD. Например:Правильный способ обновления документа mongodb из REST

GET /user 
GET /user/:id 
POST /user 
PUT /user/:id 
DEL /user/:id 

Это все оконечные он хочет использовать для моей схемы (с использованием базы данных MongoDB)..

У меня есть пользователь схемы как (упрощенный):

{ 
    id : ObjectId("..."), 
    name: "Foo fooer", 
    itemIds : [ 
     ObjectId("..."), 
     ObjectId("..."), 
     ObjectId("...") 
    ] 
} 

и схема Элементы (не нужно, чтобы показать на вопросы).

Нам необходимо добавить/удалитьitemsId от user.itemIds.
клиент хочет создать новую схему userItems:

{ 
    id : ObjectId("..."), 
    userId : ObjectId("..."), 
    itemID : ObjectId("...") 
} 

и Он хочет, чтобы удалить user.itemIds от пользователя схемы и создать 4 CRUD конечных точек/userItems.

Я думаю, что этот неправильный подход, нормализуя базу данных монго.

Но я не знаю, какой из них лучше с обеих сторон (клиент и сервер).
1) Создайте 2 конечных точки POST /UserItem, DEL /UserItem для обновления элементов в user.itemIds.

2) Обновление user.itemIds с использованием существующего API PUT /user, но клиент должен послать весь массив itemsIds обновить его (если есть много это, вероятно, плохой подход.

Клиент говорит, что этот 2 подход является плохим, ., и он только знает его SQL REST archictere (где все нормализуется) Как я могу доказать его, что он не прав, потому что он сказал мне:. Server to adapt to the client and not vice versa.

Спасибо

ответ

0

This - хорошая статья о RESTful API.

Короче говоря, ваш RESTful API должен:

  • Сосредоточьтесь на ресурс
  • имеют смысл
  • Консистенция

Например:

  • Если вы хотите добавить элемент для пользователя: сначала найдите пользователя, а не er путь вокруг. Итак, POST users/:userId/items/, чтобы добавить новый товар к пользователю, это хорошо. Или, DELETE users/:userId/items/:itemId, чтобы удалить элемент от пользователя.
  • Если вы хотите найти всех пользователей, у которых есть этот предмет: GET /items/:itemId/users/.

 Смежные вопросы

  • Нет связанных вопросов^_^