Jel neko radio vlastiti URL ruter


#1

Po defaultu frameworks dolaze sa svojim verzijama url rutera što je i za očekivati. Međutim, uraditi svoj ruter je izazovno.

Moram malo da poradim na svom poznavanju regularnih izraza pa je ovo dobra prilika. Ima li ko iskustva ?


#2

Ne mora se uopšte raditi sa regularnim izrazima (upravo suprotno).

Zabavno je da se sam poigraš sa routingom, ali na kraju dana ipak predlažem korištenje nekog već dostupnog, testiranog koda. (ne izmišljati toplu vodu).

Da popravimo kvalitetu diskusije, evo link na Python Piramid dokumentaciju: http://docs.pylonsproject.org/projects/pyramid/en/1.4-branch/narr/muchadoabouttraversal.html

Ono što je zanimljivo za Pyramid (Pylons), jeste da podržava i URL dispatch (Rails) i Traversal (Zope) patterne.

Također, većina python frameworka podržava, pored standardne URL dispatch konfiguracije na jednom mjestu, konfiguraciju routa direktno, koristeći dekoratore na response funkcije, npr. http://flask.pocoo.org/docs/quickstart/#routing


#3

URL router je pojednostavljeni parser, a zlatno pravilo u programiranju je izbjegavati pisati parsere kad god je moguće :slight_smile:


#4

Jasno;

Hvala na odgovorima - ja koristim defaultni Express.js routing sistem + samostalni Director ruter - koji se može koristiti i na klijentskoj i serverskoj strani ( node server ). Nije mi namjera izmišljati toplu vodu, već kao što rekoh malo poraditi na reg. izrazima i povećati svoju fleksibilnost kao web-programera po pitanju rutiranja. Ovi Pyhon linkovi su skroz interesantni - vidim i custom odgovore ( kako kažeš dekoratore ) i templates i static files… Reddit backend je rađen u Pytnon-u sa Jinja templates koliko se sjećam jednog kursa o izradi web-aplikacija.

I expressjs to podržava, preko imenskog prostora modula, i odgovora u vidu callbacka( asinhrono ):

app.get("/home/:id",function(req,res){
    res.send("Hvala na odgovorima");
    res.render("index"); // template 
};

app.post("/home", function(req,res){
    res.send(req.body);
};

Ono što je full interesantno, je kako rutirati aplikacije na klijentskoj strani, a da budu googl-u vidljive. Standardan klijentski pristup je osloniti se na # - hash . Međutim, to Google ne vidi, pa se nude razna riješenja.
Novi HTML5 history api sa push i pop state metodama je isto tako u opticaju.

Živjeli.


#5

He he;

Jeste to istina, al pretpostavaljam kad si studirao da si ih učio pisati :slight_smile:


#6

Ne znam ja za vas ali ja se u posljednje vrijeme osjecam kao da samo to radim. Btw, napisao neki jednostavan router nedavno, apsolutno iz radoznalosti.

class Router {
    public static function handle() {
        $request = new Request();
        
        $params = explode('/', $request->getRequestUri());
        
        $c = ucwords($params[1]);
        
        $controller_path = Config::get('controllers') . DS . $c . '.php';
        
        if(!file_exists($controller_path))
        {
            throw new ControllerNotFoundException($params[1], $controller_path);
        }
        
        require_once $controller_path;
        
        $class = $c . '_Controller';
        $controller = new $class();
        $action = $params[2] . '_action';
        
        if(!method_exists($controller, $action) || !is_callable($class . '::' . $action)) {
            throw new MethodNotFoundException($c, $params[2]);
        }
        
        $controller->$action($request);
    }
}

Request je jedna moja klasa za parsiranje HTTP zahtjeva. Ovo $request->getRequestUri() je ekvivalentno $_SERVER[‘REQUEST_URI’]. I kad jos malo ovaj kod pogledam dobro sam ja odmakao sa ovim :D. Ima tu jos svasta nesto sto sam pisao iz zezancije.


#7

Ej wizz odlično je ovo - svaka čast za pokušaj. Sviđa mi se što bacaš izuzetke ( koji prevod ) Moram i ja da nešto napišem ubrzo. Iz tvog primjera vidim koliko je važno baratati stringovima - to je nešto čega sam postao svjestan tek nedavno.

Pozdrav.


#8

Evo tutorijala kako napisati RESTful web servis u PHPu bez korištenja frameworka. Zamisao je da se rutira jednom velikom switch-case strukturom. Tutorijal pretpostavlja osnovno znanje PHPa:
https://docs.google.com/document/d/1yLUPWWBmlt4lHEmLbl3AEZaFbipSa7TIeenH05vNBT8/edit


#9

Ne znam ko je pisao taj tutorial ali koristenje “eval” za parsiranje jsona nije bas najbolja moguca praksa iz sigurnosnih i performance razloga … u biti poredio bih ga sa gets() u C-u …
kad se vec koristi JSON.stringify, zasto ne i JSON.parse ?


#10

Slažem se! Ne mogu da vjerujem da je to ostalo…