Як створити веб-додатки за допомогою MongoDB

Зміст:

Anonim

Веб-додатки, що використовують MongoDB - MongoDB - це один з найкращих інструментів для серйозних веб-розробників, і в цій статті про MongoDB буде розглянуто все, що потрібно знати для створення веб-додатків за допомогою MongoDB. Але перш ніж почати, давайте детальніше розберемося з популярним інструментом.

Джерело зображення: pixabay.com

Що таке MongoDB?

Найпростіше кажучи, MongoDB - це крос-платформа, орієнтована на документи, база даних NoSQL, яка використовує JSON-документи, використовуючи динамічні схеми, звані BSON-документи, замість того, щоб дотримуватися традиційної реляційної бази даних (RDB).

Це багато термінів, з якими ви, можливо, не знайомі, тому давайте розбимо їх спочатку.

Тепер, база даних, орієнтована на документи, функціонує на базовій концепції, що документ з даними містить "метадані", які є значеннями, які використовуються для ідентифікації типу даних та полегшують їх зберігання та отримання при необхідності. Наприклад, розглянемо наступні два рядки даних:

  • Джон Хенкок
  • Архітектор

Погляд на ці два рядки повинен дати вам уявлення про те, до чого відносяться ці дані: ім’я та професія людини. Однак машина не може розрізнити це. Потрібно вказати тип даних.

У RDB цей тип може зберігатися у сховищі ключових значень, яке є окремим від самого документа. Однак, використовуючи базу даних, орієнтованої на документи, ви можете визначати тип даних під час введення коду. Отже, ви закінчите писати трохи так:

  • Джон Хенкок
  • Архітектор

І ось ти йдеш; тепер тип даних визначено прямо в документі. Це дає гнучкість, якої немає в RDB, саме тому бази даних, орієнтовані на документи, настільки популярні для веб-додатків.

Адже веб-додатки піддаються регулярним змінам та оновленням. Звичайно, RDB мають і свої переваги, і бази даних, орієнтовані на документи, не ідеальні для кожної ситуації, але не будемо відступати.

Перейдемо до JSON, BSON та схем. JSON посилається на JavaScript Object Notation, але насправді це відкритий стандартний формат даних, який може працювати з іншими мовами, ніж JavaScript.

Схема - це структура бази даних, визначена у вигляді таблиць для RDB. Оскільки бази даних, орієнтовані на документи, не використовують таких таблиць, вони по суті є безструктурними або без схемами.

Що стосується BSON, добре, що він просто означає Binary JSON, і це формат зберігання даних для бази даних MongoDB. Це все, що потрібно знати про це на цьому етапі.

Тепер, виклавши основи, давайте розберемося, чому MongoDB - це хороший вибір для створення веб-додатків:

Навіщо їхати на MongoDB?

Існує кілька причин популярності MongoDB для створення веб-додатків. MongoDB - не ідеальний інструмент; насправді далеко від цього. У MongoDB є декілька проблем, і це не дуже підходить для всіх веб-додатків. Але MongoDB добре працює, коли мова йде про веб-додатки з наступних причин:

  • MongoDB не є схемою

База даних MongoDB може зберігати колекції документів, кожен документ має свій розмір, вміст та кількість полів. Ви можете повернутися та змінити ключові значення або додати та видалити їх, як хочете.

Це також робить структуру одного об’єкта чіткою та зрозумілою, і MongoDB також легко масштабувати, коли це необхідно.

  • MongoDB загального призначення

База даних може бути використана для ряду веб-додатків, включаючи управління даними про клієнтів, управління вмістом, хаби даних, мобільні додатки, Інтернет речей, великі дані, каталоги товарів та активів та бази даних як послуга.

  • MongoDB підтримує автоматичне заточування

Реляційні бази даних зазвичай масштабують вертикально, в якому на одному сервері розміщується повна база даних. Це може обмежити масштаб роботи, при цьому рішення полягає в тому, щоб додавати горизонтально і додавати сервери, а не концентрувати потужність на одному сервері.

Спільний доступ до бази даних робиться для того, щоб уникнути цього і змусити апаратне забезпечення діяти як єдиний сервер. Розробникам доводиться розгортати кілька реляційних баз даних на машинах та розробляти код програми для розподілу даних, запитів та агрегування результатів.

MongoDB та інші бази даних NoSQL підтримують автоматичний обмін, а це означає, що вони автоматично розповсюджують дані на різних серверах, не додаючи до відома складу.

MongoDB особливо корисний для хмарних обчислень. Як розробник, вам не потрібно створювати дорогі і складні платформи для підтримки веб-додатків, але можна зосередитися на написанні фактичного коду програми.

Ще кілька термінів, щоб дізнатися про MongoDB

Добре, тому ми зараз висвітлили основи та переваги MongoDB. Перш ніж ми забруднимо руку, давайте розглянемо ще кілька термінів, з якими вам слід ознайомитись:

  • База даних: база даних містить колекції, і кожна база даних має свої файли у файловій системі. Типовий сервер MongoDB матиме кілька баз даних.
  • Колекція: група документів MongoDB називається колекцією, і це еквівалент таблиці в RDB. В одній базі даних буде колекція, а кожен документ матиме різні поля. На відміну від планшетів, колекції не мають схеми.
  • Документ: Документ - це купа пар ключових значень і має динамічну схему, а це означає, що різні документи в одній колекції можуть мати різні набори полів та структури.

    Рекомендовані курси

  • Курси налагодження Ruby
  • Навчання програмуванню PHP MySQL
  • Інтернет-навчання з програмування VB.NET
  • Навчальний курс фонду ITIL

Створення веб-додатків

Веб-додатки, що будуються для цього конкретного посібника MongoDB, є агрегатором RSS, як Google Reader. Веб-додатки матимуть два ключові компоненти: API REST та графіка каналу.

Щоб зрозуміти, що таке REST API, спочатку потрібно трохи знати про стек MEAN. Код для захоплення каналу можна знайти навіть у каталозі github.

Розуміння стека MEAN:

Стек MEAN означає:

  1. MongoDB - це база даних, яка буде використовуватись для веб-програми
  2. js, що є легкою основою веб-додатків
  3. js, що є основою для створення веб-додатків, збагачених JavaScript та HTML5
  4. js, що є серверним інтерпретатором JavaScript

Для веб-додатків, про які йдеться тут, замість інтерфейсу користувача HTML буде створений REST API. API представницького стану передачі (REST) ​​є легшою альтернативою API на основі XML і може слугувати базою для будь-якого типу інтерфейсу, незважаючи на відсутність інтерфейсу користувача.

Функції REST на моделі клієнт-сервер, при цьому клієнт надсилає команди HTTP на сервер HTTP, а також змінні параметри, закодовані в URL-адресі, що описує цільовий об'єкт дії. Потім сервер відповідає за допомогою JSON та коду результату.

Тепер MongDB і JavaScript добре реагують на JSON, що робить стек MEAN особливо підходящим для веб-додатків.

CRUD

CRUD абревіатура означає створення, читання, оновлення та видалення. Це звичайні операції з базою даних, які в HTTP перекладаються як публікація, отримання, розміщення та видалення.

Побудова API REST

Почнемо із створення API REST, розробки основи для створення веб-додатків. Додаток може бути на веб-основі або розроблений для Android, iOS або інших конкретних платформ. Для початку перерахуємо, що додаток зможе зробити:

  1. Дозволити користувачам створити обліковий запис
  2. Увімкніть їх, щоб передплатити або скасувати підписку на канали
  3. Дайте їм можливість читати та позначати записи каналу як прочитані чи непрочитані
  4. Відстежуйте RSS-канали для моніторингу
  5. Зберігайте інформацію про користувачів у відповідних облікових записах
  6. Відстежуйте підписки на канали користувачів
  7. Відстежте запис, який уже прочитав користувач

Моделювання даних

Виходячи з вимог, веб-додаткам знадобиться чотири колекції для управління інформацією:

  1. Колекція користувачів
  2. Збір кормів
  3. Колекція відображення вхідних даних користувачів
  4. Колекція записів

Ось докладніший погляд на кожен з них:

  • Колекція каналів:

Наступний JSON є хорошим прикладом для моделювання колекції каналів:

( "_id, ObjectId("523b1153a2aa6a3233a91412")

"requiresAuthentication": false,

"permanentlyRemoved": false,

"feedURL": "http://feeds.reuters.com/reuters/topNews",

"title": "Reuters",

"bozoBitSet": false,

"enabled": true,

"etag": "4bL78iLSZud2iXd/vd10mYC32BE",

"link": "http://www.reuters.com/ ",

"permanentRedirectURL": null,

"description": "Reuters news feed” )

Документ JSON, наведений вище, - це RSS-канал для Reuters, який відстежує інформацію про останні новини, опубліковані на веб-сайті. Тут ви бачите багато полів, але найважливішими для роботи веб-додатків є URL-адреса каналу та опис каналу.

URL-адреса важлива для отримання вмісту з потрібного джерела, а опис є важливим, оскільки він містить підсумок каналу.

Решта полів тим часом призначені для внутрішнього використання. Ви можете додати більше або видалити щось, як вам здається. У верхній частині документа знаходиться поле _id. Кожен документ повинен мати це поле, і ідентифікатор повинен бути унікальним.

У наведеному вище прикладі для поля було створено ідентифікатор вручну. Якщо ви пропустите це, MongoDB автоматично зробить його.

  • Відстеження та збір записів каналів

Якщо ви хочете відслідковувати більше каналів новин, ви можете додати більше їх, використовуючи той самий формат, що вказаний вище. Після того, як ви закінчите додавати канали, саме час відстежувати та збирати їх. Нижче наведено документ для збору каналів:

( "_id": ObjectId("523b1153a2aa6a3233a91412"),

"description": "Martin Shkreli, the poster boy for prescription drug price increases who was arrested for securities fraud this week, has stepped down from his post as chief executive officer of Turing Pharmaceuticals Inc, the company said on Friday”,

"title": "Turing Pharma names chairman to replace Shkreli as CEO",

"summary": "Turing Pharma names chairman to replace Shkreli as CEO”,

"content": (( "base": "http://www.reuters.com/",

"type": "text/html",

"value": ”LOTS OF HTML HERE",

"language": "en" )), "published Date": ISODate("2015-12-18T18:13:58+0000"),

"link": " http://www.reuters.com/article/us-usa-crime-shkreli-ceo-idUSKBN0U122R20151218",

"feedID": ObjectId("523b1153a2aa6a3233a913f8") )

Ще раз ви побачите заповнене поле _id разом із деякими іншими полями, такими як опис, резюме та заголовок. Поле вмісту використовує масив, а MongoDB дозволяє масивам зберігати документи. Таке підрядне документування може бути особливо корисним у ситуаціях, коли всю інформацію потрібно зберігати разом.

Візьміть на замітку feedID; він має той самий тип ObjectId і значення _id, як і раніше введений документ для каналу Reuters. Це пропонує референтну модель, тож ви можете запитувати колекцію каналів з тим же значенням ідентифікатора, щоб повернути документ Reuters.

  • Відстеження користувача

Ось приклад документа для відстеження користувачів:

( "_id" : ObjectId("54ad6c3ae764de42070b27b1"),

"active" : true,

"email" : " ",

"firstName" : "John",

"lastName" : "Hancock",

"sp_api_key_id" : "6YQB0A8VXM0X8RVDPPLRHBI7J",

"sp_api_key_secret" : "veBw/YFx56Dl0bbiVEpvbjF”,

"lastLogin" : ISODate("2015-01-07T17:26:18.996Z"),

"created" : ISODate("2015-01-07T17:26:18.995Z"),

"subs" : ( ObjectId("523b1153a2aa6a3233a913f8"),

ObjectId("54b563c3a50a190b50f4d63b") ), )

Тут у користувача є три ключові атрибути: ім’я, прізвище та адреса електронної пошти. Також є два елементи, які можна використовувати з API управління користувачем Stormpath: sp_api_key_secret і sp_api_key_id.

Заключне поле subs - це масив підписки і повідомляє канал, на який підписаний користувач.

  • Картографічне введення каналів

Остаточний збірник дозволяє відображати користувачів на канали та відстежувати прочитані канали:

( "_id" : ObjectId("523b2fcc054b1b8c579bdb82"),

"read" : true,

"user_id" : ObjectId("54ad6c3ae764de42070b27b1"),

"feed_entry_id" : ObjectId("523b1153a2aa6a3233a91412"),

"feed_id" : ObjectId("523b1153a2aa6a3233a913f8") )

Як бачите, основна справжня / хибна булева система використовується для позначення читання каналу чи ні. Тепер користувач повинен мати можливість виконувати такі функції:

  1. Створення акаунта
  2. Підписка або підписка на канали
  3. Читання записів каналу
  4. Позначення каналів чи записів як прочитаних чи непрочитаних
  5. Скинути пароль

Ось перелік способів відображення цих операцій на маршрути та команди HTTP.

МаршрутКомандуванняОписЗмінні
/ користувач / зареєструватисяПОШТАЗареєструйте нового користувачаім'я
прізвище
електронною поштою
пароль
/ user / resetPasswordПУТСкидання пароляелектронною поштою
/ кормиЗАРАЗОтримайте підписки на канал для кожного користувача з описом та кількістю непрочитаних
/ канали / підписатисяПУТПідпишіться на новий каналfeedURL
/ канали / записиЗАРАЗОтримати всі записи на канали, на які підписаний користувач
/ канали // записиЗАРАЗОтримайте всі записи для конкретного каналу
/ канали /ПУТПозначте всі записи для певного каналу як прочитані чи непрочитанічитати =
/ канали // записи /ПУТПозначте певний запис як прочитаний чи непрочитанийчитати =
/ канали /УДАЛИТИСкасуйте підписку на цей конкретний канал

Безпечний HTTP - це стандартний підхід, який використовується для надсилання чутливих деталей, таких як паролі, у виробничому середовищі

Наступні кроки: справжня автентифікація

Автентифікація користувача важлива для безпечного керування користувачами, паролями та перезавантаженнями. Існує кілька способів аутентифікації облікових записів користувачів.

Наприклад, ви можете використовувати плагін для паспорта з Node.js, який корисний для автентифікації за допомогою облікових записів Facebook, Twitter та соціальних мереж.

Наведений вище приклад залежить від використання Stormpath, REST API, який підтримує авторизацію та автентифікацію за допомогою ключів API та пропонує користувачеві керування послугами.

Рекомендовані статті

Ось кілька статей, які допоможуть вам отримати більш детальну інформацію про веб-додатки за допомогою MongoDB, тому просто перейдіть за посиланням.

  1. HTML5 vs Flash із захопленням знають різницю?
  2. Java проти Node JS - 8 різниць, які ви повинні знати
  3. Застосування веб-тестування - корисне та всебічне керівництво
  4. Як користуватися веб-шаблонами HTML | Застосування | Мобільний | Найкраще
  5. Розробка програмного забезпечення проти веб-розробки
  6. Як підготувати інструменти веб-аналітики для вас (посібник)
  7. MongoDB vs PostgreSQL: Які відмінності
  8. Корисний посібник по MongoDB проти Hadoop
  9. Кращий путівник по МонгоДБ проти Кассандри