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?

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.

 

Čeština pro WP125 WordPress plugin

Pokud pro správu 125×125 reklam používáte plugin pro WordPress WP125, můžete si stáhnout češtinu. Od příští verze pluginu by měla být součástí pluginu.

Soubory s překladem (wp125-cs_CZ.mo & wp125-cs_CZ.po) stačí jednoduše nakopírovat do  /wp-content/plugins/wp125/translations/

Adobe uvolnilo CS2 zdarma ke stažení

Adobe dává CS2 zdarma ke stažení (kompletní balík) a protože tuto informaci zatím ani Adobe nikde nezveřejnilo, není úplně jisté, jaké budou podmínky. Přesto to vypadá, že CS2 bude možné použít i ke komerčním použití. CS2 stahujte přímo ze stránek Adobe. Prozatím jsou přetížené, takže nezbývá než zkoušet.

Takže pokud potřebujete Photoshop, Illustrator, InDesign nebo něco jiného z portfolia Adobe a stačí vám CS2 verze, můžete si ji zkusit stáhnout a za ušetřený peníz koupit auto.

CS2 je 9 let starý software a Adobe pro něj ukončilo podporu koncem minulého roku. Přesto by mohl na spoustu úkolů dostačovat.

Zálohujte si WordPress do Google Drive

WordPress je perfektní systém na správu obsahu, dokonce i tenhle web na něm běží. A protože je možnost k zálohování využít Google Drive – cloudové řešení s 5GiB prostoru zdarma, tak proč to nevyužít? Samozřejmě existují i jiné alternativy, o těch se zmíním někdy příště, Google drive bude první, protože ke svým doménám většinou zákládám emaily pomocí Google Apps a tak mám k dispozici i Drive, se kterým většinou už nemám co jiného dělat.

Na začátek musím říct, že nastavení záloh do google drive není úplně triviální, ale věřím, že s tímto návodem je práce na pár minut. Pro začátek nainstalujte a aktivujte plugin Google Drive for WordPress. Předpokládám, že budete mít nějaký účet u Google, ale jestli ne, tak si jeden založte a aktivujte si Google drive. A můžeme jít na to.

Continue reading „Zálohujte si WordPress do Google Drive“

Bootstrap od Twitter ve verzi 2

Poslední měsíc jsem zkoušel a zkoumal různé grid systémy, většinou tedy ty, které jsou responsive. Vzpomněl jsem si tehdy, že jsem si kdysi uložil odkaz na bootstrap, docela zajímavý projekt od tvůrců Twitteru. I jal jsem se bootstrap prozkoumat a co čert nechtěl, na úvodní stránce byla informace o tom, že brzy bude uvolněna nová verze. Nové verze jsem si všiml s měsíčním zpožděním, ale je tam a rozhodně stojí za vyzkoušení.

Future Of Web Design / FOWD 2009 in New York

Zhruba před rokem jsem vyhrál volný vstup na všechny akce od Carsonified v roce 2009. Mohl jsem si vybrat jednu, na kterou mi budou platit náklady, takže jsem zvolil New York a vyrazil 🙂

Prozatím jsem si stačil akorát vybalit, dát si burger (ani jsem ho do sebe nemohl nacpat, nechápu, proč tady mají tak úzký trubky u záchodů, když do sebe cpou takový množství jídla 🙂 ) a nějaký pivka. Nevím jestli jsem natrefil na nějaký zázračný bar, ale Guinness tady chutná skoro stejně dobře jako v Dublinu.

Continue reading „Future Of Web Design / FOWD 2009 in New York“