Webový framework pro HTTP v Go

hueG

Webový framework pro HTTP v Go
« kdy: 30. 05. 2017, 21:42:14 »
Zdravím,

Má někdo zkušenosti s http servery napsanými v GO? Používáte nějaký framework nebo všechno píšete sami nad net/http?
« Poslední změna: 30. 05. 2017, 22:58:00 od Petr Krčmář »


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Webový framework pro HTTP v Go
« Odpověď #1 kdy: 30. 05. 2017, 23:55:35 »
Zdravím,

Má někdo zkušenosti s http servery napsanými v GO? Používáte nějaký framework nebo všechno píšete sami nad net/http?
net/http většinou stačí, jde o to, co to má dělat.

hueG

Re:Webový framework pro HTTP v Go
« Odpověď #2 kdy: 31. 05. 2017, 00:19:21 »
Chtěl bych v tom napsat rest api, která by sloužila jako feed pro webové rozhraní, případně android app. V net/http mi chybí spíše minoritní věci (např. parametry v url/middlewary/routování podle http metody/route groupy). Otázka je jestli mám dopsat co mi chybí a nebo použít hotové řešení ve formě frameworku.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Webový framework pro HTTP v Go
« Odpověď #3 kdy: 31. 05. 2017, 00:41:12 »
Chtěl bych v tom napsat rest api, která by sloužila jako feed pro webové rozhraní, případně android app. V net/http mi chybí spíše minoritní věci (např. parametry v url/middlewary/routování podle http metody/route groupy). Otázka je jestli mám dopsat co mi chybí a nebo použít hotové řešení ve formě frameworku.
Parametry v URL to má. U routování asi není problém napsat vlastní. Obecně je lepší frameworky nepoužívat, čím méně cizího kódu, tím lépe. Standardní knihovna je dobře otestovaná a vyladěná. Jen databáze musí být externí, nejlépe nějaká přímo v Go, jinak to nebude zcela optimální.

hueG

Re:Webový framework pro HTTP v Go
« Odpověď #4 kdy: 31. 05. 2017, 01:18:45 »
Net/http defaultně podporuje parametry v URL? V dokumentaci sem o tom nenašel zmínku. Můžu tedy vytvářet routy typu /user/{user-id} a url se mi budou správně matchovat pokud to chápu dobře? Chtěl jsem použít MySQL, možná Postgre. Myslel jsem že optimálnost použití zajišťuje hlavně knihovna. V čem přesně by to nebylo optimální?


.

Re:Webový framework pro HTTP v Go
« Odpověď #5 kdy: 31. 05. 2017, 07:14:46 »
A už je to i na rootu... :)

Osobně doporučuji používat jen knihovny, které by se daly nazvat spíš helpery nebo nadstavbou, než frameworkem a které umožňují fungovat spolu s net/http.

Prvním z nich by byl router. Osobně používám Chi, ale pokud jsou potřeba regulární výrazy pro parametry v URL, tak je potřeba použít Gorilla router. Ze základních věci pro middleware používám mix Chi (id, IP, panic), Gorilla (sessions, cookies, websockety) a net/http. A pro rendrování JSON a templatů používám renderer z Chi. Pro embeding statických dat pak go-bindata.

Gorilla je léty prověřená sada knihoven, Chi router je sice relativně nový, ale hojně používaný, všude využívá Context a hlavně nemění parametry a použití HandlerFunc, takže nezavádí nic nového a fungují i všechny standardní návody na internetu (třeba pro testování). Podobně všechny middleware mají standardní tvar
Kód: [Vybrat]
func middleware(next http.Handler) http.Handler

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Webový framework pro HTTP v Go
« Odpověď #6 kdy: 31. 05. 2017, 08:46:37 »
Chtěl jsem použít MySQL, možná Postgre. Myslel jsem že optimálnost použití zajišťuje hlavně knihovna. V čem přesně by to nebylo optimální?
Jde-li o malou aplikaci, je vhodné mít vše v jednom procesu, a pak nemá cenu volat knihovny v C, s tím je spojený jistý overhead. DB knihoven přímo v Go je k dispozici několik (vesměs ale NoSQL). Pokud to ale má vše běžet na jednom serveru a požadavků bude málo, tak je to pochopitelně jedno a nějaký DB server přes síť bude naprosto v pohodě.

.

Re:Webový framework pro HTTP v Go
« Odpověď #7 kdy: 31. 05. 2017, 22:21:33 »
Chtěl jsem použít MySQL, možná Postgre. Myslel jsem že optimálnost použití zajišťuje hlavně knihovna. V čem přesně by to nebylo optimální?
Jde-li o malou aplikaci, je vhodné mít vše v jednom procesu, a pak nemá cenu volat knihovny v C, s tím je spojený jistý overhead. DB knihoven přímo v Go je k dispozici několik (vesměs ale NoSQL). Pokud to ale má vše běžet na jednom serveru a požadavků bude málo, tak je to pochopitelně jedno a nějaký DB server přes síť bude naprosto v pohodě.
Tak v Go se pro přístup k sql db (a i některým nosql) používá univerzální balík database/sql a jen se připojí driver a nejpoužívanější drivery jak k MySQL, tak i PostgreSQL jsou pure Go. Jediné, co je samozřejmě v C, je driver pro SQLite3.
Pokud nechcete použít ORM, pak je dobré se ještě podívat na jmoiron/sqlx.

Ondrej

Re:Webový framework pro HTTP v Go
« Odpověď #8 kdy: 31. 05. 2017, 23:13:23 »
Používám knihovny, nepřijde mě že by v GO bylo něco alá Django atp kde má smysl framework používat.

Knihovny od gorilla jsou super, na middlware používám negroni, co se týče DB tak gorm... Nemá smysl si psát něco vlastního když je mraky prověřenejch knihoven a zrovna na to API používám právě proto go rád.

hueG

Re:Webový framework pro HTTP v Go
« Odpověď #9 kdy: 31. 05. 2017, 23:57:43 »
Nemyslel jsem frameworky z kategorie Django/Rails, ale spíš Flask/Sinatra. Více mi sedí k golangu. Zkusím si asi nakonec něco poskládat z knihoven co jsou k dispozici.

boris

Re:Webový framework pro HTTP v Go
« Odpověď #10 kdy: 01. 06. 2017, 06:50:55 »
Najdi si na githube uzivatela ehmo a kukni co ohviezdickoval

https://github.com/ehmo?tab=stars