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?

Windows Phone Developer nyní za $19 / 380CZK

Pokud vás zajímá vývoj mobilních aplikací a rádi byste proniknuli do tajů Windows Phone, můžete se nyní přihlásit do vývojařského účtu za zvýhodněnou cenu $19 (380CZK), což je oproti běžnám $99 docela slušná sleva. Akce je časově omezená, takže není proč váhat.

wp-develop-for-19-bucks

 

Nastavujeme Wedos VPS #1 – LAMP

Protože své VPS přesouvám od Angel hosting k Wedosu, rozhodl jsem se trošku popsat nastavení serveru. V podstatě se mi nastavení u Angel hostingu líbilo, takže se víceméně budu snažit to trochu zduplikovat. Z toho důvodu jsem vybral Debian 7.

Co by mělo být výsledkem?

Na VPS poběží několik webů postavených na WordPressu (třeba tento blog) a pár aplikací napsaných v Nette. Budeme tedy potřebovat webový server (použijeme Apache), PHP a MySQL. Občas se také bue využívat FTP. Zároveň bych rád nastavil GIT deployment. A samozřejmě si trochu pořešíme zálohy. Pro emaily využívám hostované služby, takže ty s největší pravděpodobností nastavovat nebudu.

Pokud používáte SVN (Subversion), pak můžete využít Wedos Disk (k VPS dostanete 10GB disk zdarma), který tuto funkcionalitu nabízí a nebudete muset nic nastavovat.

Jestliže si chcete ušetřit práci, nainstalujte si Debian 6 ISP, dostanete přednastavený server s ISPConfig, což je administrační rozhranní, ve kterém můžete přidávat weby, databáze, emaily. Já jsem zvolil čistý Debian 7, protože se mi ISPConfig nelíbí a raději ten výkon, co spotřebuje, využiji jinak.

Instalujeme LAMP

Pokud jste VPS objednali, počkejte až vám přijde email s informacemi o založení (trvá to asi 15 minut). V emailu máte IP adresu serveru a heslo k root účtu. Přes Putty se připojte přes SSH k serveru a můžeme začít.

Začneme klasickou kombinací, která nám zaktualizuje nainstalované balíčky. Pravděpodobně ale prozatím nic aktualizovat nebudete.

apt-get update
apt-get upgrade

Instalace MySQL

MySQL nainstalujete následujícím příkazem.

apt-get install mysql-server mysql-client

01-install-mysql-password.fw

Během instalace budete požádáni o zadání hesla k root účtu pro přístup k MySQL, doporučuji použít nějaké silné heslo. Pokud o heslo během instalace nebude požádáni (starší verze Debian) nebo se něco nepovede, můžete ho nastavit příkazem:

# /usr/bin/mysqladmin -u root password 'kurevsky-silne-heslo'

Instalace Apache2

Následně nainstalujte http server, v našem případě Apache2.

aptitude install apache2 apache2-doc
a2enmod userdir
service apache2 restart

A můžeme otestovat, zda nám server běží. Do adresního řádku prohlížeče vložte IP adresu vašeho VPS, měli byste vidět podobnou stránku.

02-apache-it-works.fwInstalace PHP

Zbývá nám nainstalovat PHP, zase to nebude nic složitého.

apt-get install php5 php5-mysql libapache2-mod-php5

Po instalaci opět otestujeme, zda PHP běží. Server by nám nyní měl běžet z /var/www, vytvoříme v tomto adresáři nový sobour (index.php) příkazem

nano /var/www/index.php

A do něj zapíšeme

<?php phpinfo(); ?>

Do adresního řádku prohlížeče zadáme IP adresu našeho VPS takto 11.22.33.44/index.php. Pokud se vám zobrazí podobná stránka, gratuluji, základní LAMP máte připravený.

03-php-is-working.fw

Nové VPS aneb pád angel hostingu

Před lety jsem měl strašnou radost, protože se mi podařilo objevit skvělé VPS od angel hosting a ještě za rozumnou cenu. Přehledná a víceméně funkční administrace a VPS v základu pěkně nastavené. Inu, stal jsem se zákazníkem, párkrát doporučil zde na blogu i jinde, nastalo pár změn (nějaké přesuny, něco s konektivitou, jiné účtování, …), prostě nic, co by normálního smrtelníka až tak moc zajímalo.

To že v administraci pár věcí nefunguje (třeba vymazání domény) beru tak nějak samozřejmě. Přeci jenom jsem zákazníkem Vodafone a jejich samobsluha nasazuje laťku hodně vysoko.

No jo, jenže potom přišlo pár výpadků. Nepříjemné, chápu. Na podporu se nedovolám (občas tedy ani nenajdu číslo, preventivně si v době výpadky shazují i vlastní web), na email odpověď nedostanu.

Jako chápu, že když si vylejete kafe do serveru, tak je lepší běhat s fénem kolem a snažit se ho vysušit, než zvedat telefony a říkat lidem, že to fakt zatím nejde, ale jen co to všechno vyřídíte, tak žhavíte fén. Ale v době různých sociálních sítí bych si představoval, že by (v ideálním případě) nějaký kreativní psavec v dotyčné společnosti vypotil vtipný status, který by mě zabavil do doby, než se mi VPS zase rozběhne! Jenže ono se to těžko realizuje, když profily na sociálních sítích nemáte.

Taky by se dal napsat email.

Oni totiž lidi občas na tu technickou podporu nevolají, protože chtějí prudit a nebo že se zrovna nudí ve vaně a už obvolali celou rodinu. Oni by třeba rádi zjistili, jestli jim VPS někdo nehacknul (a nemají tak problém začít řešit sami) a nebo aby zjistili časový horizont, ve kterém je reálné obnovení služeb.

V červnu tohoto roku nastal masivní výpadek. Možná to tak strašné nebylo, ale kluci z angel hostingu napsali dokonce dva emaily o tom, co se stalo (chyba nastala někde během procesu: červený drátek přiložte na červený drátek, modrý… Situaci dále analyzujeme) a přislíbili kompenzaci. Samozřejmě žádná kompenzace nenastala.

Takže po několika letech Angel hosting opouštím a přesunuji se k Wedos, o čemž bych možná mohl napsat ještě pár článků. Angel hosting už jsem nikomu nedoporučoval, nyní říkám ani to nezkoušejte! Pokud jste masochisti a pořád vás to láká, tak zkuste Banán.

Celá ta blbá situace s Angel hostingem nastala tak, že Michal Rudolf (zakladatel společnosti) společnost prodal společnosti xHosting, což je banda korporátních zmrdů a ti to prostě nezvládají. Pokud vás zajímá trocha bulváru, tak si můžete počíst na cn130.com.

 

Visual studio podporuje GIT

Microsoft přidal do Visual Studio podporu pro GIT, v současnosti tak tedy podporuje decentralizovaný verzovací systém (GIT) a centralizovaný (TFS). Celkem dobrý krok, řekl bych. Jak to funguje se můžete podívat v následujícím videu.

Pokud si chcete vyzkoušet Team Foundation Server (doporučuji), můžete si zdarma vyzkoušet hostované řešení přímo od Microsoftu. Služba je fakt skvěle udělaná, připravená na SCRUMM. V současnosti je zdarma až pro 5 uživatelů, do budoucna ji plánují zpoplatnit, ceny ještě nejsou stanoveny.

I český vývojář už může dělat placené aplikace

Čeští android vývojáři měli dlouhou dobu poněkud ztíženou pozici – nemohli do Google Play (dříve android marketu) dávat placené aplikace. Až do konce roku 2010 se dokonce z ČR aplikace nedaly ani nakupovat. Nemožnost prodeje aplikací bylo hodně diskutované téma na GDD 2011 a všichni googleři se nás snažili přesvědčit, že si tento problém uvědomují a že se na něm intenzivně pracuje. Když si představím celkovou právní džungli v ČR, je mi jasné, že asi nebylo jednoduché se s tím poprat a kdyby v ČR nebylo ohromné množství kvalitních vývojářů, asi by se market pro placené aplikace nezpřístupnil nikdy.

Continue reading „I český vývojář už může dělat placené aplikace“

Adobe Fireworks CS4 – první dojmy

Fireworks jsem zkoušel, ještě když se jednalo o produkt firmy Macromedia (dříve také vyvíjela Dreamweaver) a již tenkrát jsem si říkal, že se jedná o hodně povedený nástroj pro tvorbu webové grafiky. Čas šel dál, Macromedii koupilo Adobe a převzalo jejich produkty. V Adobe CS3 mě Fireworks moc nezaujal. Skoro jsem si říkal, že to vypadá, že se dál vyvíjet nebude. Byl to takový nejvíc odfláklý program v celém balíku.

Continue reading „Adobe Fireworks CS4 – první dojmy“

Jak obnovit firmware v D-Link DAP-1160

Kdysi dávno jsem si chtěl koupit levný WIFI router na rozběhání bezdrátové sítě po domě. Vybral jsem d-link dap-1160 a netušil, co mě čeká za překvapení. Zařízení by sice routovat mohlo, ale firmware to v té době neuměl. Škoda jen, že spousta těch věcí, které firmware nezvládal byla napsána i na krabici mezi features. Aspoň vím, že příště mám lépe hledat.

Každopádně bylo jedno řešení. Použít lepší firmware od jiné firmy. Návod jak do zařízení nahrát wrt-311 nebo wrt-312 jsem zde již publikoval. Co ale když chcete po vyzkoušení firmware nahrát zpět původní od d-linku? Není to nic složitého.

Continue reading „Jak obnovit firmware v D-Link DAP-1160“