Píšeme a testujeme API v node.js

Ještě před pár lety bych si nedokázal představit, že bych s radostí používal javascript, ale něco na tom Node.js je. Všechno to začalo začátkem roku, kdy jsme pracovali na poměrně zajímavém projektu, jehož součástí bylo API, na kterém se postaví mobilní aplikace a se kterým bude komunikovat front end aplikace. A protože mobilní aplikace budu vyvíjet jiný dodavatel, museli jsme API pěkně zdokumentovat.

Fáze č. 1 – dokumentujeme a navrhujeme

Samozřejmě bychom mohli použít nějaké cloudové nástroje typu Google Drive, ale když už tady existuje Apiary, tak proč ho nevyužít? Chvilku času zabere studování dokumentace, ale pak se Apiary promění v mocný nástroj a už bez něj nedáte ránu! Tak jo, návrh API máme, popojedem.

Fáze č. 2 – píšeme API

Backend aplikace jsme nahodili v Nette (PHP), frontend nám měl běžet na Node.js. Otázkou tedy bylo, zda psát API v Nette nebo ho nahodit v Node.js.  Abych nemusel překračovat hranice své komfortní zóny, tak jsem samozřejmě propagoval Nette s využitím komponenty Restful, což by rozhodně nebylo špatné řešení, ale protože Šubin projevil víc iniciativy a nahodil kostlivce (aka skeleton) aplikace v Node, velmi snadno mě přesvědčil, že je to poměrně dobrá varianta.

Rozchodit si vývojové prostředí pro Node je otázka chviličky, takže jen pár poznámek k tomu, co jsme použili.

  • Jako správce knihoven samozřejmě používáme npm, oproti composeru (pro PHP) je tam subjektivně více knihoven, ale také nejsou všechny v úplně dokonalém stavu a je potřeba trochu hledat.
  • Nodemon nám pouští server (nebo aplikaci, chcete-li) a stará se o hlídání změn v kódu, při změně aplikaci restartuje.
  • Pro práci s databází používáme Knex, což nebyla první knihovna, kterou jsme zkoušeli, ale rozhodně je nejmocnější a doporučuji ho. A protože to jede na postgresu, tak tam máme ještě knihovnu pg.
  • Používáme Express v aktuální verzi, který se nám stará o routování.
  • Pro logování http requestů využíváme Morgan, jako klienta na http requesty potém request a body-parser na parsování.

A taková malá ukázka, jak udělat výpis z nějaké tabulky v db:

var express = require('express');
var router = express.Router();

var DB = require('config').Config.DB;
var knex = require('knex')({
    client: 'pg',
    connection: DB,
    debug: true
});

router.get('/', function(req, res) {
    var query = knex('superTabulkaVdb').select();
    res.sendSimpleQuery(query);
});

module.exports = router;

Fáze č. 3 – testujeme

Co mě velmi potěšilo je testování, které je opravdu jednoduché a ač jsem pro Node.js neměl s testy zkušenost, byl jsem schopen pokrýt API testy za velmi krátkou dobu. Pro testování používáme  mochasupertest, assert a should.

Stačí vytvořit v rootu projektu složku test a do ní začít sázet testy. Vypadají třeba takto (test/simpletest.js):

var assert = require('assert');
var should = require('should');
var request = require('supertest');

var url = "http://localhost:5000/api/";

describe.skip('SIMPLE TEST', function() {

    /*
     * Testing GET
     */
        it('test simple GET', function(done){

            request(url)
                .get('/')
                .expect(200)
                .end(function(err, res){
                    if (err) throw err;
                    
                    res.body.should.have.status(200);
                    res.body.should.have.property('data')
                       .should.not.be.empty;

                    done();
                })
        });
});

Testy se spouští třeba napsáním mocha v terminálu. Může to být ještě jednodušší?

Na závěr ještě doporučím doplněk pro hezčí formátování JSON v prohlížeči Chrome, který se překvapivě jmenuje JSON formatter. Dost ulehčí orientaci v generovaných JSONech.

A jak píšete API vy?

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *