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?

Zase to zapínání SEO

SEO je největším peklem při tvorbě webů a asi jedna z nejvíc frustrujících věcí, se kterými se setkávám. Frustrace vychází z existence SEO ninjů a těch různých SEOmatů. Tyto problémy ve většině případů vychází ze špatné komunikace s klientem, jdou tudíž na bedra člověka, který stojí za technickým řešením webu. Většinou si tedy řeknu, že jde o mou chybu a snažím se to nějak vyřešit. Ale abych se dostal k věci, tedy k mému poslednímu SEO zážitku.

Přijde mi takhle v pátek email od klienta s nějakou SEO analýzou. Spolupracujeme spolu už skoro rok a klient (ač a nebo právě proto, že jde o větší firmu) nemá moc peněz, respektive není moc velká vůle tlačit peníze na web. Člověk, co  tam dělá marketing,  samozřejmě chce investovat do digitálního světa, ale zbytek rady starších o tom má jiné představy a tak jsme udělali priority a v malých krocích je implementujeme.

A protože je tady u nás zvykem ztrácet čas na školeních financovaných z EFS, markeťákovi samozřejmě zařídí nějaké to školení. Potuď bez výtek. Školení se nějak dotýká SEO problematiky. Školitel je aktivní a řeší konkrétní problémy svých klientů. Super přístup. Takže se takhle po školení nudí a vyplodí 2 stránkové pojednání o tom, co z hlediska SEO má klient na stránkách špatně. A k téhle práci se dostávám já.

A nastává překvapení. Celé ty dvě stránky textu se zaobírají chybějícími meta tagy KEYWORDS a DESCRIPTION s vysvětlením, že z hlediska SEO jsou to nejdůležitější věcí v celém širém vesmíru.

Ano, DESCRIPTION by to doplnit chtělo, z hlediska SEO nemá význam, ale není nad to mít pěkně udělaný text, který se zobrazí ve vyhledávání. Bohužel nemáme ani dobře napsané texty u produktů a to má větší prioritu. Nebo objednávkový formulář. A tak trochu postrádá smysl tahat lidi na web, ze kterého vám utečou a nebo nebudou schopní udělat objednávku.

KEYWORDS snad ani nekomentuji. V roce 2009 Google vydal vyjádření, že na tenhle meta tag oficiálně kašlou? Není to dost dlouhá doba, aby tuto informaci školitelé byli schopní absorbovat?

Dokument samozřejmě obsahoval návrh klíčových slov, která do meta tagu umístit. Bylo to asi 500 (?) znaků klíčových slov – a jejich výběr vycházel z kvantitativní analýzy jejich zastoupení na webu. To, jestli ta klíčová slova někdo vyhledává,  nikdo neřešil.

Překvapilo mě, že školitel (nebudu dávat odkaz, ale jedná se o poměrně velkou firmu, která se specializuje na školení placená z ESF) dokáže vyplodit takto zavádějící dokument a jak povrchně rozumí tématu, které školí. Tahle školení placená EU nám byl čert dlužen.

Veselé příhody s telemarketingem

Poslední dobou mám jeden telemarketingový hovor za druhým a přestává to být legrace. Bohužel telemarketéři jsou lišky mazané a nedá se vymyslet žádná strategie, která by je rázem odpálkovala a přitom by člověk zůstal slušný.

Z poslední doby mi tedy volal jeden mlaďoch, že mám investovat do zemního plynu (díky situaci na Ukrajině to prý bude zhodnocení za měsíc 20%. Rozhovor začal se slovy, že se mnou již hovořil a domluvili jsme se, že mi dá vědět, až bude něco zajímavého. Asi si špatně vyložil mou větu „nemám zájem o investování na burze“, příště zkusím být konkrétnější.

Na pomyslném žebříčku top debilních telemarketérů však stále vede Citibank se svýma kreditkama. Celé to začalo tak, že jim Telefonica kdysi prodala mé telefonní číslo (resp. celou databázi telefonních čísel) a od té doby si občas spokojeně pokecáme. Dříve tak jednou za rok, nyní tak co 3 měsíce. Když jsem odmítl poprvé, tak se na mě milá paní v telefonu obořila, jestli vůbec vím, co to je kreditka, protože kdybych to věděl, tak ji určitě chci. Naposledy mi zavolal nějaký frajírek, kterého jsem tedy zabrzdil v rozletu a poprosil jsem ho, aby mě vyřadil z databáze. Asi ho to vystrašilo natolik, že mi telefon položil.

Sem tam mi někdo chce poslat doplňky stravy (vy nechcete být zdravý?), holící strojek (jak takhle skvělou nabídku můžete odmítnout?) a nebo možnost zakoupit reklamu v omalovánkách pro děti (vyloženě moje cílovka).

Tak nějak si dokážu představit, že nějaké konverze udělají, ale nepředpokládám, že bych byl zrovna v té jejich cílovce. Každopádně nechápu, proč mi volají opakovaně, když jejich nabídky stále odmítám. To nemají nic lepšího na práci? Nebo nejsou schopní využívat CRM?

Dělníci bulváru

Dokument , který opět rozvířil spoustu emocí. Buzz na sociálních sítích, spousta komentářů v mainstreamových médiích. Remunda a Klusák natočili tradičně líbivý (v dobrém smyslu slova) dokument a stejně jako Tarantino v Nespoutaném Djangovi si opět moc nelámou hlavu s nějakými nepsanými pravidly tvorby dokumentárních filmů. Ostatně to nedělá ani Erika Hníková, jejíž dokumenty mi přijdou dost podobné – po řemeslné stránce věci.

Marketingově byl dokument opět dobře zpropagován, o čemž svědčí i to, že se podařilo vyprodat kino pár dní před TV premiérou. Jenže kromě toho, že se na dokument pěkně dívalo, tam nebylo nic, co by mě zaujalo. Vhled do světa bulváru to byl hezký, ale poněkud plytký a povrchní. Úvodní scénu z Václaváku jsem viděl jako trailer a dál už tam nic zajímavějšího nebylo.

Osobně mi chybělo otitulkování dokumentu, občas jsem měl problém porozumět, hlavně tedy Pavlovi Novotnému. Jeho zpověď však pro mě byla už jenom omílání toho, co před rokem řekl v rozhovoru pro sme.sk. Chápu roli, kterou se rozhodl v dokumentu hrát, takže proti němu celkem nic moc. Jediný trochu zásadnější moment (scéna, kde se řeší rezignace na zachraňování světa), byl výrazně upozaděn a nic moc z něj nevzešlo. Škoda.

Tím pádem v dokumentu zůstává zajímavá snad pouze bizarní reportérka Extra.cz a její odvaha vyjít na ples v opeře v naprosto nevhodném oblečení. Ale natočit asociála je tak trochu moc jednoduché.

Výběrovému řízení na redaktora chyběla výpověď, stejně hluchá byla scéna s otcem Pavla Novotného. Závěrečnou scénu s dcerou by prý Pavel Novotný v dokumentu raději neviděl (ale dokument neautorizoval) a já si myslím, že by to škoda nebyla.

Pro lidi, co si neumí objednat kafe, je v pekle jedna speciální část. K snídani se tam pije Piccolo.

milos-cermak-preso

Miloš Čermák umístil na facebook tenhle zajímavý post, který ve mě rozvířil spoustu emocí, protože kvůli dementům, co si neumějí objednat kafe, musím při každé objednávce protrpět útrpný rozhovor ve stylu:

– Dal bych si espresso

– Aha, takže piccolo?

(tady přichází fígl, protože někde si pod pojmem piccolo představují ristretto a někde espresso, takže piccolo tím pádem doopravdy neexistuje!)

– Nevím, chtěl bych tu velikost mezi ristretto a lungo.

Nebo po objednávce espressa dostanu lungo, což je úplně ta nejhorší varianta, protože málokde lungo dělají naředěním espressa horkou vodou, ale nechají protéct vodu skrze páku naplněnou pofiderní kávou řízlou robustou a tak vám nezbyde než to naředit mlékem a cukrem. V tom případě si můžete ale do hrnku místo kafe nabrat bahno z kaluže a vyjde to nastejno.

Můžeme vinu za tuhle situaci házet na zelená saka z devadesátek, která tady zakládala jednu ristorante za druhou, ale pravdou je, že za to můžou ignoranti, kteří si prostě kafe neumí objednat.

Tak sorry, děcka, ale pokud je nad vaše schopnosti naučit se 3 (slovy tři) velikosti kávy (ristretto, espresso a lungo), naučte se jednu (presso = lungo), kterou si budete dávat a nebo nepyskujte, když vaší objednávku někdo nepochopí. Tohle vytváření kultu debility a stavění vlastní blbosti na piedestal fakt nechápu.

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.

 

Číst je sexy, kupte si Kindle

Měl jsem takový krásný plán, že budu daleko víc psát na blog a tím ukojím své grafomanské choutky, ale v Prosinci jsem zakoupil Kindle a od té doby jen čtu a čtu. Je to vskutku geniální zařízení a všem to moc doporučuji, dokonce to velmi zaujalo mou babičku, která je jinak velký technický antitalent, ale knihy vždy četla a když jsem jí čtečku ukazoval a předvedl jí, jak si lze libovolně zvětšit písmo, zajiskřilo jí v očích a vypadala, že by opustila svůj odpor k novým technologiím.

Objednával jsem přímo na americkém amazonu, vše proběhlo bez problémů. Amazon vám k poštovnému připočítá i náklady na DPH a clo a vyřeší to za vás, takže to co platíte u Amazon je konečná cena. Balíček mi dorazil za 2 dny od objednání. Pokud budete objednávat, tak pamatujte na to, že vám ho doveze přepravní společnost UPS a tak si u objednávky zadejte adresu, na které se během dne pravděpodobně budete vyskytovat. K dispozici máte i tracking code, takže zásilku můžete bez problémů sledovat a zjistíte, kdy ji můžete očekávat.

reading-is-sexy