Как да изградите RESTful API с удостоверяване за 5 минути - всичко от вашия команден ред (част 1)

Ако заглавието на тази статия ви вълнува, тогава приятелю, вие ще постигнете ниво 100 на удовлетворение до края. Набързо ще прегледам хода на тази статия:

  1. Това, което предстои да създадем: RESTful API, който обработва дневници с хранителни продукти в менюто на ресторант. Базата данни, използвана в задния край, ще бъде MongoDB. (Можете буквално да използвате всяка трепереща база данни на тази планета. Има изчерпателен списък на съединители за бази данни / съединители, които не са бази данни, поддържани от LoopBack по-долу.)
  2. Какво е LoopBack: С изключително прости думи, това е силно разширяема, рамка Node.js с отворен код, използвана за създаване на динамични REST API от край до край много бързо. API, генерирани чрез LoopBack, са API на Swagger (най-популярната в света API рамка и много скоро ще разберете защо). Предната част може да бъде направена в която и рамка, в която сте влюбени; Ъглова или реагираща.
  3. Създаване на приложение чрез CLI: Това е частта WOW, която премахва цялото включено програмиране. LoopBack CLI е толкова красив, че всички часове на разработка са намалени до секунди. Тук щяхме да настроим нашата база данни с помощта на CLI.
  4. Създаване на модели на данни чрез CLI: Отново, без програмиране. Всички чрез красивия CLI.
  5. Настройване на удостоверяване чрез CLI: Ако имате опит със създаването на API, знаете колко трудно е да ограничите части от API, като използвате удостоверяване. Настройването на удостоверяване, базирано на токени, чрез Express + Node.js от страна на сървъра е мъка. Цялата тази болка ще бъде премахната, като опитате еликсира на LoopBack! Това е собственото питие на небето.

Ръководство стъпка по стъпка:

Предварителни условия: Уверете се, че имате инсталиран Node.js, Robomongo и работещ сървър MongoDB.

СТЪПКА 1: Инсталирайте LoopBack CLI чрез NPM

Отворете терминала и напишете следната команда, за да инсталирате LoopBack CLI, така че да има достъп до командата 'lb'. Само чрез командата 'lb' можем да генерираме приложения, модели, източници на данни и др. За допълнително четене: //loopback.io/doc/en/lb2/Command-line-tools.html#using-yeoman

$ npm install -g loopback-cli

Уверете се, че сте инсталирали това глобално, иначе командата 'lb' може да не работи за вас.

СТЪПКА 2: Създаване на приложение

Направете директория, в която искате да съхраните проекта си. Ще го нарека „ресторант-меню“. Уверете се, че сте отворили тази директория във вашия терминал, така че всички файлове, генерирани чрез LoopBack, да се съхраняват в тази папка.

След това въведете следната команда:

$ lb

Ще бъдат зададени много въпроси, като тези, показани на изображението по-долу.

(За да навигирате между опциите, използвайте клавишите със стрелки на клавиатурата)

API е СЪЗДАДЕН!

Аз не съм се шегувам. Не ми вярвате? Стартирайте приложението, като използвате следната команда:

$ node .

Ако посочите localhost: 3000, ще видите нещо подобно:

Ако обаче отидете на localhost: 3000 / explorer, ще видите великолепния SwaggerAPI.

LoopBack е настроил всички маршрути за вас:

ПОЛУЧАВАЙТЕ потребители, POST потребители, PUT потребители, DELETE потребители, Вход, Изход, Промяна на парола. Буквално всичко! В противен случай ще отнеме часове работа, за да се кодира това.

Отворете тази папка във всеки текстов редактор. Бих използвал Atom.

СТЪПКА 3: Свързване на MongoDB

Ако отворите datasources.jsonв папката Сървър, трябва да видите нещо като:

{ "db": { "name": "db", "connector": "memory" }}

Това означава, че в момента използваният източник на данни е паметта на нашия компютър. Трябва да променим това на Монго. Така че нека инсталираме mongo конектор:

$ npm install --save loopback-connector-mongodb

Наред с това се надявам mongod да работи. Ето как бихте знаели, че се изпълнява:

2018-01-27T15:01:13.278+0530 I NETWORK [thread1] waiting for connections on port 27017

Сега, нека свържем конектора!

$ lb datasource mongoDS --connector mongoDB

Това ще зададе много въпроси, както следва:

Сега модифицирайте, datasources.jsonзащото не искаме да използваме памет. Искаме да използваме Монго.

{ "db": { "host": "localhost", "port": 27017, "url": "", "database": "food", "password": "", "name": "mongoDS", "user": "", "connector": "mongodb" }}

Така че нашата база данни с име: foodе създадена.

СТЪПКА 4: Създаване на модели за данни

Изпълнете следната команда, за да създадете модели на данни:

$ lb model

You may add however many properties to a particular model. To stop entering more properties, just hit Enter to get out of the CLI.

Check out dishes.json in the Common/Models folder.

{ "name": "dishes", "base": "PersistedModel", "idInjection": true, "options": { "validateUpsert": true }, "properties": { "name": { "type": "string", "required": true }, "price": { "type": "number", "required": true } }, "validations": [], "relations": {}, "acls": [], "methods": {}}

You may edit the properties from this json file as well. It is not necessary to use CLI.

Now let’s rerun the server using the following command and head over to localhost:3000/explorer

$ node .

Now you’ll see 2 models: dishes, and user

Now let’s POST some dish.

Now let’s GET the same dish.

You may play around with other HTTP requests too!

These APIs can be accessed outside the explorer as well:

//localhost:3000/api/dishes

STEP 5: AUTHENTICATION: Cherry on the cake!

To set up authentication, run the following command:

$ lb acl

Now, let’s try to GET the dishes. Before that, please rerun the server.

Let’s get authenticated! For that, we need to get registered first. So we POST in users.

Now, let’s log in.

Now, copy the ID in the response body and paste it in the Access Token field on top of the page.

Now we are authenticated. YAY.

Now, let’s GET the dishes again.

HOORAY!

Congratulations if you’ve successfully reached this step. So proud of you.

Next steps would be to create a front end around this API which would be done later.

The frontend tutorial of this article can be found here. In that tutorial, I have used ReactJS to weave a frontend around this API.

Bye folks!

Happy coding.