Frameworky pro tvorbu RESTful API #5 – ExpressJS (NodeJS)
V tomto článku se podíváme na NodeJS a jeho framework ExpressJS. Jedná se o softwarový systém (lépe řečeno runtime) navržený pro psaní vysoce škálovatelných internetových aplikací, především webových serverů. Programy pro Node.js jsou psané v jazyce JavaScript, hojně využívající model událostí a asynchronní I/O operace pro minimalizaci režie procesoru a maximalizaci výkonu. ExpressJS je pak open source framework pro NodeJS určený pro tvorbu webových aplikací, včetně vysoké podpory pro samotné RESTful API.
Principy technologie
Jednou z hlavních výhod NodeJS může být i jeho snadnější instalace na více prostředích. V Linuxu ho snadno zprovozníme příkazovou řádkou, přičemž na Windows si můžeme z oficiálních stránek stáhnout software, který nám poskytne příkazovou řádku pro NodeJS (npm příkazy) a následně můžeme postupovat obdobně snadno jako na Linuxu. Pro ukázku se můžeme podívat na příkaz pro instalaci frameworku express:
npm install express --save
Když už máme zprovozněný NodeJS včetně frameworku Express, můžeme se podívat na samotnou tvorbu RESTful API, v jejímž případě se opět dostáváme do model-view-controller architektury. Již jsme probírali formát JSON, takže víme, že javaskript nemá nijak striktně předdefinované formáty objektů. Co se týče modelů, použijeme knihovnu Mongoose, která umožňuje snadné napojení na MongoDB databázi a navíc umožňuje definovat schéma zdrojů:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ArticleSchema = new Schema({
title: {
type: String,
required: 'Kindly fill title of Article'
},
content: {
type: String,
required: 'Kindly fill content of Article'
}
});
module.exports = mongoose.model('Articles', ArticleSchema);
Vidíme, že za pomocí Mongoose lze pak na JSON objekty i definovat různé integritní omezení. Co nás může zajímat dále, je samotné routování HTTP requestů – ve frameworku express by routovací funkce vypadaly následovně:
var articleList = require('../controllers/articleListController');
app.route('/articles')
.get(articleList.list_all_tasks)
.post(articleList.create_a_task);
app.route('/articles/:articleId')
.get(articleList.read_a_task)
.put(articleList.update_a_task)
.delete(articleList.delete_a_task);
Vidíme, že použité routování nás již rovnou směruje do vrstvy controller. Pro ukázku vezmeme metodu v controlleru sloužící pro vrácení všech článků ve formátu JSON:
var mongoose = require('mongoose'),
Article = mongoose.model('Articles');
exports.list_all_tasks = function(req, res) {
Article.find({}, function(err, article) {
if (err)
res.send(err);
res.json(article);
});
};
MongoDB přímo pracuje s formétem JSON, což nám pak umožní snadné dotazování nad kolekcí Articles i v případě dalších parametrů. Vidíme, že serializace do formátu JSON je také velice jednoduchá a nemusíme ji řešit složitě jako v Pythonu.
Toto vše postačí k tomu, aby byl základ našeho RESTful API hotový, následně již zbývá jen nastavit správné parametry (MongoDB připojení, port) a vše můžeme spustit.
ExpressJS pak poskytuje spoustu dalších funkcí, jako například přidávání dodatečného middleware, jehož cílem je zajistit co nejlepší výkon a škálovatelnost.
Hlavní výhody
- Windows + Linux Dobrá podpora jak pro Windows, tak pro Linux.
- JSON + MongoDB Snadné napojení na MongoDB databázi a snadná práce s JSON objekty, které jsou v RESTful API nejpopulárnější.
- Škálovatelnost Vysoká škálovatelnost, množství dalšího dodatečného middleware a funkcí. Dobrá podpora pro asynchronní volání funkcí
- NodeJS komunita NodeJS má celkem rozsáhlou komunitu, zajišťující dobrou podporu při tvorbě aplikací.
Hlavní nevýhody
- Javascript Dle mého názoru je Javascript trochu nestandardní jazyk a chová se trochu jinak, než by člověk, který zná předchozí prozkoumané jazyky (Java, C# apod) očekával
Celkové zhodnocení:
1 .. nejlepší, 5 .. nejhorší
- Jednoduchost a intuitivnost – 2 Práce s frameworkem se dá rychle naučit, avšak uživatelé, kteří neznají javascript, mohou být překvapeni z jeho nestandardního chování.
- Dokumentace – 1 Dobrá dokumentace od vývojářů, včetně rozsáhlé komunity, zajišťující další podporu při tvorbě aplikací.
- Spolehlivost – 1 ExpresJS poskytuje vysokou škálovatelnost a další moduly zabraňující známým chybám v protokolu HTTP.
- Popularita – 3 NodeJS je technologie, jejíž popularita je na vzestupu, dá se očekávat, že překročí dříve velice populární Ruby – Rails, avšak vývoj frameworku Express je občas nestálý, což mu popularitu trochu snižuje.
Mezi další populární technologie pro jazyk Node.js (Javascript) lze řadit:
- Sails.js – https://sailsjs.com/
- Restify – http://restify.com/
- Hapi.js – https://hapijs.com/
- a další..