Upgrade your REST API server to support HTTPS and HTTP

I am using node.js reify ver4.0.3

The simple following code works like a simple REST API server that supports HTTP. API call example http://127.0.0.1:9898/echo/message

var restify = require('restify'); var server = restify.createServer({ name: 'myapp', version: '1.0.0' }); server.use(restify.acceptParser(server.acceptable)); server.use(restify.queryParser()); server.use(restify.bodyParser()); //http://127.0.0.1:9898/echo/sdasd server.get('/echo/:name', function (req, res, next) { res.send(req.params); return next(); }); server.listen(9898, function () { console.log('%s listening at %s', server.name, server.url); }); 

Suppose I want to support HTTPS and call the API call https://127.0.0.1:9898/echo/message

How can I do that?

I noticed that fixing code changes is pretty fast and older code with an older version may not work with the latest version.

+5
source share
2 answers

To use HTTPS, you need a key and certificate:

 var https_options = { key: fs.readFileSync('/etc/ssl/self-signed/server.key'), certificate: fs.readFileSync('/etc/ssl/self-signed/server.crt') }; var https_server = restify.createServer(https_options); 

You will need to start both servers to allow HTTP and HTTPS access:

 http_server.listen(80, function() { console.log('%s listening at %s', http_server.name, http_server.url); });. https_server.listen(443, function() { console.log('%s listening at %s', https_server.name, https_server.url); });. 

To configure routes to the server, declare the same routes for both servers, redirecting between HTTP and HTTPS as necessary:

 http_server.get('/1', function (req, res, next) { res.redirect('https://www.foo.com/1', next); }); https_server.get('/1', function (req, res, next) { // Process the request }); 

The above listens for requests to the /1 route and simply redirects it to the HTTPS server that processes it.

+9
source

Thanks to a comment by Bas Van Stein, here is a complete working example.

  var restify = require('restify'); var fs = require('fs'); // Setup some https server options //generated from http://www.selfsignedcertificate.com/ var https_options = { key: fs.readFileSync('./HTTPS.key'), //on current folder certificate: fs.readFileSync('./HTTPS.cert') }; // Instantiate our two servers var server = restify.createServer(); var https_server = restify.createServer(https_options); // Put any routing, response, etc. logic here. This allows us to define these functions // only once, and it will be re-used on both the HTTP and HTTPs servers var setup_server = function(app) { function respond(req, res, next) { res.send('I see you ' + req.params.name); } // Routes app.get('/test/:name', respond); } // Now, setup both servers in one step setup_server(server); setup_server(https_server); // Start our servers to listen on the appropriate ports server.listen(9848, function() { console.log('%s listening at %s', server.name, server.url); }); https_server.listen(443, function() { console.log('%s listening at %s', https_server.name, https_server.url); }); 
+10
source

Source: https://habr.com/ru/post/1235756/


All Articles