NodeJS ve MySQL Veritabanı'nı kullanarak RESTful bir API oluşturma
Bu günlerde profesyonel web servisleri oluşturmak için bir REST API'sı bulunmayan hiçbir proje yok.

 REST (Temsili Durum Transferi), herhangi bir sunucu tarafı işlemi yapmadan web üzerindeki belirli bilgileri değiştirmek veya görüntülemek için kullanılabilecek bir web servisi oluşturmak için kılavuz ilkelerden oluşur. RESTful API'leri kullanmak çok zaman kazandırır. Twitter, Facebook, Google ve binlerce şirket REST API'lerini kullanıyor. Bunun nedeni, İnternet hizmetleri için API'lerin oluşturulmasında REST en etkin ve yaygın standarttır.

nodebanner

Önceki derslerimizde PHP ve Java kullanarak RESTful API'lerin nasıl oluşturulacağını daha önce tartışmıştık. HTTP isteklerini işlemek için RESTful API işlevi düğümü nasıl oluşturulacağına bakalım. Bu API ile HTTP isteğini gönderen herhangi bir uygulamayla kullanabilirsiniz. Özellikle herhangi bir mobil uygulama oluşturuyorsanız, çalışmanın en iyi yoludur.

GitHub Projesi

NodeJs ve MySQL yazılımlarını kurmanız, aşağıdaki tablolar oluşturmanız veya benim Git depomuzdan sql dosyasını indirmeniz ve içe aktarmanız gerekir.

Kullanıcılar Tablosu

Kullanıcı tablosu, tüm kullanıcıların kayıt ayrıntılarını içerir.

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

Mesajlar Tablosu

Bu tablo, tüm kullanıcı iletilerini içerir.

CREATE TABLE `messages` (
`mid` int(11) AUTO_INCREMENT,
`message` text,
`uid_fk` int(11),
PRIMARY KEY (`mid`)
);

messages

Kurulum Node Restful Projesi

Terminal veya Komut Satırına gidin, bir proje klasörü oluşturun.

$ mkdir nodeRestful

$ cd nodeRestful

Düğüm projenizi başlatın, bu bir package.json dosyası oluşturacaktır.

$ node init

Restful API'ler için hapi.js eklentisini kurun.

$ npm install hapi --save

Bir Node Hapi Sunucusu Oluşturun

server.js

Metin editörünü açın, aşağıdaki kodu kopyalayın. Burada const (JavaScript ES6), bir tanımlayıcı yeniden atanmayacak, siz de var değerini kullanabilmenizi isterseniz.

'use strict';
const Hapi = require('hapi');

// Create a server with a host and port
const server = new Hapi.Server();
server.connection({ 
    host: 'localhost', 
    port: 8000 
});

// Add the route
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);
});

Projeyi Çalıştır

$ sudo npm start

Tarayıcınızı açın ve aşağıdaki URL'yi çalıştırın, "merhaba dünya" sonucunu bulacaksınız.

http://localhost:8000/helloword

Veritabanı Bağlantısı

MySQL Database

Düğüm paketi yöneticisi (NPM) kullanarak Düğüm için MySQL paketini yükleyin.

$ npm install mysql --save

server.js

Server.js dosyasını değiştirin ve MySQL bağlantı kodunu ekleyin. Burada, MySQL veritabanı adını, ana bilgisayarını, kullanıcı adını ve şifresini değiştirmeniz gerekir.

'use strict';
const Hapi = require('hapi');
const MySQL = require('mysql');

// Create a server with a host and port
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();

.....
.....
.....

Kullanıcıların Detaylarını Alın

İşte kullanıcılar için veri yolu. Chrome tarayıcısı için poster uzantısını indirin, bu bu Huzursuz API'larınızı test etmenize yardımcı olur.

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);
    });
  }
});

users

Parametrelerle Çalışma

Parametre Onayları

Geçerli girdiler için Joi paketini Düğüm için kurun.

$ npm install joi --save

signup_database

Username 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 validation
birthyear: Joi.number().integer().min(1900).max(2013)

Email validation
email: Joi.string().email()

Kullanıcı Verilerini Al

Burada, kullanıcı kimliği girdisini doğrulayan kullanıcı adı, kullanıcı adı Joi.number().integer() temel alınarak elde edilir.

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()
       }
  }
}
});

userdata

POST

Kullanıcı mesajı ayrıntılarını al, post parametreleri yükle birlikte çalışır.

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()
}
}

}
});

messagePost

Sil

Kullanıcı ve ileti kimliklerine dayalı olarak kullanıcı ileti verilerini silin.

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()
      }
     }
}
});

delete

Şifreleme

Kullanıcı şifresini şifrelememiz lazım, bcrypt paketi tuz şifreleme kodunu sağlayacak.

$ npm install bcrypt --save

POST Kullanıcı Kaydı

Kullanıcı şifreli kullanıcı şifresi ile kaydoluyor.

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}$/)
       }
    }
}
});

signup

sendMessage

GitHub Projesi


"NodeJS ve MySQL Veritabanı'nı kullanarak RESTful bir API oluşturma konulu haberimizde Teknoloji Haberleri olarak sizlere NodeJS ve MySQL Veritabanı'nı kullanarak RESTful bir API oluşturma ile ilgili son gelişmeleri aktarmak istedik. Hemen yukarıda NodeJS ve MySQL Veritabanı'nı kullanarak RESTful bir API oluşturma ile ilgili yorum ve görüşleri inceleyerek sizlerde yorum bırakabilirsiniz. "
5
4
2
1
0