NodeJS# Membuat RestFull API Dengan NodeJS
Semangat menjalankan ibadah puasa...
Postingan kali ini saya akan share sedikit pengetahuan dari hasil belajar membuat RestFull API dengan NodeJs dan MySQL. Ok langsung saja pertama kita buat project baru dengan nama node-api-mysql.
jika teman2 belum tau cara membuat project baru di NodeJs bisa lihat DISINI .
setelah selesai membuat project baru, kita perlu menambahkan beberapa library yaitu :
- mysql
- mysql
- body-parser
- cors
- rootpath
- nodemon
lalu buat file baru dengan nama server.js dan isikan source code berikut :
require('rootpath')();
const express = require('express'),
port = process.env.PORT || 7000,
bodyParser = require('body-parser'),
cors = require('cors'),
basicAuth = require('./app/auth/basic-auth'),
routes = require('./app/routes');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(basicAuth);
app.use(cors());
routes(app);
app.get('/', (req, res) =>{
res.json({'status':true,'message':'Node JS API V.01'});
})
app.listen(port);
console.log('NodeJS-API running in port : ' + port);
struktur project bisa dilihat seperti berikut :
Authentication
untuk authentication disini saya menggunakan basic auth, berikut source code pada folder auth :
- basic-auth.js
const userService = require('./user.service');
module.exports = basicAuth;
async function basicAuth(req, res, next) {
if (req.path === '/users/authenticate') {
return next();
}
// check basic auth
if (!req.headers.authorization || req.headers.authorization.indexOf('Basic ') === -1) {
const data = {
'status' : false,
'message' : 'You are not authorized'
};
return res.status(401).json(data);
}
//Verifikasi auth
const base64Credentials = req.headers.authorization.split(' ')[1];
const credentials = Buffer.from(base64Credentials, 'base64').toString('ascii');
const [username, password] = credentials.split(':');
const user = await userService.authenticate({ username, password });
if (!user) {
const data = {
'status' : false,
'message' : 'Invalid Authentication Credentials'
};
return res.status(401).json(data);
}else{
}
req.user = user
next();
}
- user.service.js
// users hardcoded for simplicity, store in a db for production applications
const users = [
{ id: 1, username: 'test', password: 'test', firstName: 'Test', lastName: 'User' },
{ id: 2, username: '+6287763098298', password: '12345678', firstName: 'Test', lastName: 'User' }
];
const userLogin = [];
module.exports = {
authenticate
};
async function authenticate({ username, password }) {
const user = users.find(u => u.username === username && u.password === password);
if (user) {
const { password, ...userWithoutPassword } = user;
return userWithoutPassword;
}
}
lalu index.js yang ada didalam folder routes, nanti semua routing akan dimasukkan disini, sebagai contoh disini saya membuat satu routing yaitu siswa
'use strict';
module.exports = function(app) {
var dataSiswa = require('../controller/masterdata/siswaController');
//Route Siswa
app.route('/siswa').get(dataSiswa.getSiswa);
};
Controller
di dalam controller->masterdata tambahkan siswaController.js
'use strict';
const response = require('../../response');
exports.getSiswa = async function(req, res){
response.ok('Data siswa', res)
};
siswaController.js ini dipanggil dari routing
tambahkan file response.js
'use strict';
exports.ok = function(values, res) {
var data = {
'status': true,
'data': values
};
res.json(data);
res.end();
};
exports.error = function(message, res){
const data = {
'status' : false,
'message' : message
};
res.json(data);
res.end();
};
jika sudah coba jalankan server dengan command : nodemon server.js, maka akan terlihat seperti berikut :
untuk mencoba API-nya jalankan menggunakan postman
klik send
Jika menggunakan password atau username yang belum ada maka response-nya seperti berikut :
untuk proses pembuatan CRUD akan saya share di postingan selanjutnya.
Terimakasih :D
Comments
Post a Comment