2015-08-01 5 views
0

Я проектирование нового веб-сайта. Прежде чем я начну код, я многому учусь о базе api и nosql (поскольку я привык к sql, но я хочу попробовать с mongoDB).дизайн API: Нужна помощь для URL-адресов

В MongoDB, я буду иметь 'пользователя' документ так:

{ 
    firstname: 'xxxxxxx', 
    lastname: 'xxxxxxx', 
    projects: [ 
     { 
     name: 'project xxxxxxx', 
     participants: [], // array of friends into this project 
     operations: [ 
      { title: 'Title OP xxxxxxx', contributors: [] }, 
      { title: 'Title OP xxxxxxx', contributors: [] }, 
      { title: 'Title OP xxxxxxx', contributors: [] } 
     ] 
     } 
    ] 
} 

мне было интересно, две вещи:

  1. Если projects.participants и projects.operations.contributors быть ссылки другим пользователям?
  2. Для API, я должен сделать что-то вроде: (? Должен мой API всегда начинаются с users)
    GET /users/:id_user
    GET /users/:id_user/projects/:id_project
    GET /users/:id_user/projects/:id_project/operations/:id_operation

Если вы когда-либо лучшее решение я буду рад узнать.

Благодаря

EDIT 1: Я буду работать на NodeJS с экспресс и я хотел бы иметь REST API.

+1

Что вам больше всего подходит? А также что здесь имеет наибольший смысл? Все находится в одном объекте «Пользователь» со встроенными данными? Поэтому, если в целом все ссылается на «пользователь», тогда имеет смысл включить этот идентификатор во все запросы. Если, однако, другие встроенные элементы имеют свои собственные «уникальные» идентификаторы, тогда было бы вполне разумно иметь их собственные конечные точки. Но будьте осторожны. Вложенные массивы внутри массивов не являются отличным шаблоном дизайна. Read [positional $ update] (http://docs.mongodb.org/manual/reference/operator/update/positional/) –

ответ

1
  1. да, projects.participants и projects.operations.contributors могут быть ссылки на другие документы, в одной и той же коллекции. Каждый из них должен ссылаться на действительный _id в той же коллекции.

  2. пожалуйста, вы можете поместить больше света на то, как именно вы создаете свои API-интерфейсы? Я имею в виду, какую структуру вы используете в качестве оболочки для доступа к mongoDB? Может быть, тогда я могу попытаться помочь больше.

+0

Хорошо для первого вопроса. Во-вторых, я буду использовать NodeJS с выражением. – Maxime

0

ok отлично !!! Итак, пользователей - ваше имя вашей коллекции. Его абсолютно не нужно начинать с вашего имени API с пользователями. В node.js вы можете создать маршрутизатор, который направит ваш запрос в конкретный файл js, и вы можете называть его всем, что хотите. Пример:

использования: Вы хотите выставить 3 API 1. Для того, чтобы получить доступ ко всем пользователям. (Экспонируются с использованием URL -/getallusers) 2. Для доступа ко всем участникам проекта. (Экспонируются с использованием URL -/getparticipantsbyproject) 3. Для того, чтобы получить доступ ко всем жертвователям в операциях. (Экспонируются с использованием URL -/getcontributorsbyproject).

Вы можете написать все эти API в своем файле myapi и разоблачить их.

Теперь вы можете очень хорошо назвать эти API-интерфейсы из браузера с помощью нижеприведенных ссылок:

  1. http://host:port/myapi/getallusers

  2. http://host:port/myapi/getparticipantsbyproject

  3. http://host:port/myapi/getcontributorsbyproject
+0

Arf. Я забыл точно: я хочу иметь REST API! Я думаю, что вы предлагаете не следовать за отдыхом, верно? – Maxime

0

Сво только о RESTful API. Я упомянул выше 3 URL-адреса, которые являются ничем иным, как RESTful API, раскрывающим разные функции.