Создание RESTful API с использованием NodeJS и MySQL

REST(Representational State Transfer) представляет собой набор принципов построения веб-службы, предназначенной для изменения или просмотра информации без обращения к серверу. Использование RESTful API экономит время. Поскольку REST будет наиболее эффективным и распространенным стандартом создания API для интернет-сервисов.

Создание RESTful API с использованием NodeJS и MySQL

Рассмотрим, как создать RESTful API, используя для обработки HTTP-запросов NodeJS. Вы сможете легко использовать его с любым приложением, которое отправляет HTTP-запрос. Это оптимальный метод, особенно если создаете мобильное приложение.

Node Restful — Загрузить проект с Github

Для начала установите NodeJS и MySQL, создайте таблицы или загрузите БД из Git-репозитория.

Таблица посетителей

Включает всю регистрационную информацию посетителей.

CREATE TABLE `users`(`uid` int(11) AUTO_INCREMENT,`username` varchar(50),`password` varchar(200),`email` varchar(200),PRIMARY KEY(`uid`));

Таблица сообщений

Здесь хранятся все сообщения посетителей.

CREATE TABLE `messages`(`mid` int(11) AUTO_INCREMENT,`message` text,`uid_fk` int(11),PRIMARY KEY(`mid`));
Создание RESTful API с использованием NodeJS и MySQL

Параметр проекта Node Restful

Зайдите в терминал или командную строку и создайте папку проекта.

$ mkdir nodeRestful$ cd nodeRestful

Инициализируйте проект NodeJS. В результате будет создан файл package.json.

$ node init

Установите для RESTful API плагин hapi.js.

$ npm install hapi --save

Создание сервера Node Hapi

server.js

Откройте текстовый редактор, создайте новый файл и скопируйте в него приведенный ниже код. В нем const(JavaScript ES6) — это идентификатор, который не будет переопределяться. Если планируете, можно использовать var.

'use strict';const Hapi = require('hapi');// Создание сервера с хостом и портомconst server = new Hapi.Server();server.connection({ host: 'localhost', port: 8000 });// Добавление маршрутаserver.route({ method: 'GET', path:'/helloworld', handler: function(request, reply) { return reply('hello world');}});server.start((err) => { if(err) { throw err; } console.log('Server running at:', server.info.uri);});

Запустите проект

$ sudo npm start

Откройте в браузере URL-адрес http://localhost:8000/helloworld, и вы увидите текст «hello world»:

Подключение к базе данных

База данных MySQL

Используя менеджер пакетов NodeJS(NPM), установите пакет MySQL для NodeJS.

$ npm install mysql –save

server.js

В файл server.js добавьте код подключения к MySQL. В приведенном ниже примере измените имя базы данных, хост, имя посетителя и пароль.

'use strict';const Hapi = require('hapi');const MySQL = require('mysql');// Создание сервера с хостом и портомconst server = new Hapi.Server();const connection = MySQL.createConnection({     host: 'localhost',     user: 'username',     password: 'password',     database: 'database_name'});server.connection({    host: 'localhost',    port: 8000});connection.connect();

Получение информации о посетителях

Скачайте расширение poster для браузера Google Chrome. Оно поможет проверить RESTful API.

http://localhost:8000/users

server.route({    method: 'GET',    path: '/users',    handler: function(request, reply) {       connection.query('SELECT uid, username, email FROM users',       function(error, results, fields) {       if(error) throw error;       reply(results);    });  }});
Создание RESTful API с использованием NodeJS и MySQL

Работа с настройками

Проверка настроек

Для обеспечения валидности входных данных установите пакет Joi для NodeJS.

$ npm install joi --saveUsername validation minimum value 3 characters and maximum 30. username: Joi.string().alphanum().min(3).max(30).required()Password regular expression min 8 and max 30 password: Joi.string().regex(/^[a-zA-Z0-9]{8,30}$/)Message validation supports both strings and numbers. message: [Joi.string(), Joi.number()]Birth year validationbirthyear: Joi.number().integer().min(1900).max(2013)Email validationemail: Joi.string().email()

Получение данных посетителя

Здесь мы получаем данные посетителя на основе значения uid, Joi.number(). integer() проверяет ввод идентификатора посетителя.

http://localhost:8000/user/1

const Joi = require('joi');server.route({    method: 'GET',    path: '/user/{uid}',    handler: function(request, reply) {    const uid = request.params.uid;    connection.query('SELECT uid, username, email FROM users WHERE uid = "' + uid +'"',    function(error, results, fields) {       if(error) throw error;       reply(results);    });    },   config: {       validate: {        params: {        uid: Joi.number().integer()       }  }}});
Создание RESTful API с использованием NodeJS и MySQL

POST

Настройки сообщения работают при помощи payload.

http://localhost:8000/messages

server.route({    method: 'POST',    path: '/messages',    handler: function(request, reply) {    const uid = request.payload.uid;    connection.query('SELECT * FROM messages WHERE uid_fk = "' + uid + '"',    function(error, results, fields) {        if(error) throw error;        reply(results);    });},config: {    validate: {    payload: {    uid: Joi.number().integer()}}}});
Создание RESTful API с использованием NodeJS и MySQL

Удаление

Удаление данных о посте на основе идентификатора посетителя и сообщения.

http://localhost:8000/message/1/3

server.route({    method: 'DELETE',    path: '/message/{uid}/{mid}',    handler: function(request, reply) {    const uid = request.params.uid;    const mid = request.params.mid;    connection.query('DELETE FROM messages WHERE uid_fk = "' + uid + '"AND mid = "' + mid + '"',    function(error, result, fields) {       if(error) throw error;       if(result.affectedRows) {           reply(true);       } else {           reply(false);       }});},config: {     validate: {     params: {       uid: Joi.number().integer(),       mid: Joi.number().integer()      }     }}}); 
Создание RESTful API с использованием NodeJS и MySQL

Шифрование

Нам необходимо зашифровать пароль посетителя. Для этого используем пакет bcrypt.

$ npm install bcrypt --save
Создание RESTful API с использованием NodeJS и MySQL
server.route({    method: 'POST',    path: '/signup',    handler: function(request, reply) {    const username = request.payload.username;    const email = request.payload.email;    const password = request.payload.password;    //Encryption var salt = Bcrypt.genSaltSync();    var encryptedPassword = Bcrypt.hashSync(password, salt);    //Decrypt var orgPassword = Bcrypt.compareSync(password, encryptedPassword);    connection.query('INSERT INTO users(username,email,passcode) VALUES   ("' + username + '","' + email + '","' + encryptedPassword + '")',    function (error, results, fields) {        if (error) throw error;        reply(results);    });},config: {      validate: {       payload: {          username: Joi.string().alphanum().min(3).max(30).required(),          email: Joi.string().email(),          password: Joi.string().regex(/^[a-zA-Z0-9]{8,30}$/)       }    }}});

Создание RESTful API с использованием NodeJS и MySQL
Создание RESTful API с использованием NodeJS и MySQL

Node Restful — Загрузить этот проект с Github

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *