Question: What is RESTful APIs?
Full form of REST is Representational State Transfer. It is web standards architecture used to create an API.
Question: What type of request handled by RESTful APIs?
HTTP requests
Question: How to create an API?
- Create a folder with name of api in your node project, and create three folder inside this. i.e controllers, models and routes.
- Create 3 empty files in each folder i.e todoListController.js, todoListModel.js and todoListRoutes.js
- Now, Folder Structure will be as below:
-
Add Following script in each empty file:
todoListController.js
var mongoose = require('mongoose'), Task = mongoose.model('Tasks'); /* List all todoList*/ exports.list_all_tasks = function(req, res) { Task.find({}, function(err, task) { if (err) res.send(err); res.json(task); }); }; /* List all todoList*/ exports.create_a_task = function(req, res) { var saveData = {} saveData.name = req.body.name; saveData.status = req.body.status; var new_task = new Task(saveData); new_task.save(function(err, task) { if (err) res.send(err); res.json(task); }); }; /* Get a todo list details*/ exports.read_a_task = function(req, res) { Task.findById(req.params.taskId, function(err, task) { if (err) res.send(err); res.json(task); }); }; /* UPdate a toto data*/ exports.update_a_task = function(req, res) { Task.findOneAndUpdate(req.params.taskId, req.body, {new : true}, function(err, task) { if (err) res.send(err); res.json(task); }); }; exports.delete_a_task = function(req, res) { Task.remove({ _id: req.params.taskId }, function(err, task) { if (err) res.send(err); res.json({message: 'Task successfully deleted'}); }); };
todoListModel.js
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var TaskSchema = new Schema({ name: { type: String, Required: 'Kindly enter the name of the task' }, Created_date: { type: Date, default: Date.now }, status: { type: [{ type: String, enum: ['pending', 'ongoing', 'completed'] }], default: ['ongoing'] } }); module.exports = mongoose.model('Tasks', TaskSchema);
todoListRoutes.js
module.exports = function(app) { var todoList = require('../controllers/todoListController'); // todoList Routes app.route('/tasks') .get(todoList.list_all_tasks) .post(todoList.create_a_task); app.route('/tasks/:taskId') .get(todoList.read_a_task) .post(todoList.update_a_task) .delete(todoList.delete_a_task); };
- Create a myapp.js empty file in project folder and add following script code.
var express = require('express'), app = express(), port = process.env.PORT || 3000, mongoose = require('mongoose'), Task = require('./api/models/todoListModel'), bodyParser = require('body-parser'); mongoose.Promise = global.Promise; mongoose.connect('mongodb://localhost/Tododb'); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); var routes = require('./api/routes/todoListRoutes'); routes(app); app.listen(port); console.log('RESTful API server started: ' + port+' PORT');
- Now you need install following modules
npm install express npm install mongoose npm install body-parser
-
Now run following command, to test the APIs
node myapp.js
-api --api/controllers/todoListController.js --api/models/todoListModel.js --api/routes/todoListRoutes.js
Question: Provide Create Task API
URL: http://localhost:3000/tasks
Method: POST
Request Data:
{ "name":"I need to go for walk", "status":"ongoing" }
Question: Provide List All records API
URL: http://localhost:3000/tasks
Method: POST
Response Data:
[{"_id":"5937ff6a5fc96f1c1492877f","name":"I will go for walk daily.","__v":0,"status":["ongoing"],"Created_date":"2017-06-07T13:28:10.608Z"},{"_id":"593803fb5fc96f1c14928782","name":"Get up early in the morning","__v":0,"status":["ongoing"],"Created_date":"2017-06-07T13:47:39.246Z"}]
Question: Provide Update Records
URL: http://localhost:3000/tasks/5938d8e86d3e500cd8da6a12
Method: POST
Request Data:
{ "name": "I goes on walk daily.", }
Question: Provide Get Records:
URL: http://localhost:3000/tasks/5938d8e86d3e500cd8da6a12
Method: POST
Response Data:
{"_id":"5938d8e86d3e500cd8da6a12","name":"Arun kumar Gupta","__v":0,"status":["ongoing"],"Created_date":"2017-06-08T04:56:08.156Z"}
Question: Provide Delete Records
URL: http://localhost:3000/tasks/5938d8e86d3e500cd8da6a12
Method: DELETE
Response Data:
{ "message": "Task successfully deleted" }