REST architecture has become very popular to construct API. At the same time Node.js is increasingly used to create REST API. What makes Node.js so popular for that?
Quick & easy development
You can construct REST API with Node.js really quickly.
Node.js has large and active community that contribute many useful and mature modules which can be easily included and used. For example, to construct REST API such known modules as express, restify and hapi fit perfectly. They provide easy way to declare API, handle incoming parameters, errors, transformation to JSON, streaming and sending response.
Traditional handling of requests is based on threads and blocking operations leading to CPU and memory consuming. For example, if API code reads something from a database, the code stands at that place and waits for operation to finish. In order to handle other requests while that thread is busy, server spawns more threads using more memory and processing time.
Node.js is different. It operates on a single-thread, uses an event-driven and a non-blocking I/O approach.
- Single thread is used to handle multiple concurrent requests
- All long-running tasks (data access, input/output) are always executed asynchronously on top of worker threads
- Node.js makes this type of concurrent programming easier to utilize
This model is highly efficient and scalable as Node.js is basically always accepting requests because it’s not waiting for any read or write operations. That makes it lightweight and efficient to support hundreds of thousands of concurrent requests.
Great approach to construct API for existing applications
Often there is a need to construct a modern, well-structured API for existing application or a set of applications. To implement that it is better to use dedicated API Proxy that can provide:
- orchestration of incoming requests to appropriate services
- transformation of obtained results to result format
- security applying authentication protocols
- API usage monitoring
Also it is very important that API Proxy should comply with performance requirements:
- minimal overhead on the interaction with existing applications
- API Proxy should not be affected if one of the services of existing applications may work too slow or even get stuck
- API Proxy should be lightweight and easy scalable if required
So why Node.js?
Node.js is a perfect approach to implement such REST API Proxy and to comply with all performance requirements:
Easy to write API and interaction code
There are a lot of ready and useful modules to work with pure HTTP(s), REST API, Web Services, Sockets, etc that can be used both to construct API and to implement interaction with existing applications.
Using event-driven and non-blocking I/O approach of Node.js it is easy to stream results back to the client of API as they are getting from existing applications.
It is easy to get events on request/connection life cycle and collect metrics on API usage in Node.js.
Authentication strategies like OAuth, OpenID, Basic and others are available through passport.js, everyauth and other modules and can be applied easily to API.
Node.js is lightweight, fast and scalable
Node.js allows you to build fast, scalable API Proxy capable of handling a huge number of simultaneous requests with high throughput.
Node.js is mature
Node.js is mature and it powers services for some huge companies like LinkedIn, Walmart, eBay, PayPal, Yahoo and others.
Finally, I’d like to say that our experience also proves that Node.js is a great choice to construct REST API. Also it would be great to hear your opinion and practical experience. What approach do you use to construct REST API and why?