Slide 1

Slide 1 text

Building REST API with GoLang 14 November 2015 Burak AYDIN 4PPS

Slide 2

Slide 2 text

Why Go Micro services hype Easy deployment Performance blog.parse.com/learn/how-we-moved-our-api-from-ruby-to-go-and-saved-our- sanity/ (http://blog.parse.com/learn/how-we-moved-our-api-from-ruby-to-go-and-saved-our-sanity/)

Slide 3

Slide 3 text

Comparing Go and Java

Slide 4

Slide 4 text

Commons Static Types Garbage Collection Variables are always initialized (zero/nil/false) Methods Interfaces

Slide 5

Slide 5 text

Differs Go compiles to machine code. Function values, closures Strings UTF-8 Built-in concurreny Go has great tools!

Slide 6

Slide 6 text

Go Mentality Do something very well, but don't do so much. No news is good news. Perfect?

Slide 7

Slide 7 text

Hello Hello.java p u b l i c c l a s s M a i n { p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) { S y s t e m . o u t . p r i n t l n ( " H e l l o , w o r l d ! " ) ; } } Hello.go f u n c m a i n ( ) { f m t . P r i n t l n ( " H e l l o , G o " ) }

Slide 8

Slide 8 text

JSON in Go

Slide 9

Slide 9 text

Json in Go "encoding/json" Unmarshal/Marshal Encoder/Decoder

Slide 10

Slide 10 text

Json in Go p a c k a g e m a i n i m p o r t ( " f m t " " e n c o d i n g / j s o n " ) t y p e U s e r s t r u c t { i d i n t n a m e s t r i n g } f u n c m a i n ( ) { d a t a : = [ ] b y t e ( ` { " i d " : 1 2 3 , " n a m e " : " j i l l " } ` ) u s e r : = U s e r { } e r r : = j s o n . U n m a r s h a l ( d a t a , & u s e r ) i f e r r ! = n i l { p a n i c ( e r r ) } f m t . P r i n t f ( " H e l l o % s " , u s e r . n a m e ) } Run

Slide 11

Slide 11 text

Json in Go p a c k a g e m a i n i m p o r t ( " f m t " " e n c o d i n g / j s o n " ) t y p e U s e r s t r u c t { I d i n t ` j s o n : " i d " ` N a m e s t r i n g ` j s o n : " n a m e " ` } f u n c m a i n ( ) { d a t a : = [ ] b y t e ( ` { " i d " : 1 2 3 , " n a m e " : " j i l l " } ` ) u s e r : = U s e r { } e r r : = j s o n . U n m a r s h a l ( d a t a , & u s e r ) i f e r r ! = n i l { p a n i c ( e r r ) } f m t . P r i n t f ( " H e l l o % s " , u s e r . N a m e ) } Run

Slide 12

Slide 12 text

Webserver p a c k a g e m a i n i m p o r t ( " f m t " " l o g " " n e t / h t t p " ) f u n c m a i n ( ) { h t t p . H a n d l e F u n c ( " / h e l l o " , h a n d l e H e l l o ) f m t . P r i n t l n ( " s e r v i n g o n h t t p : / / l o c a l h o s t : 8 0 8 0 / h e l l o " ) l o g . F a t a l ( h t t p . L i s t e n A n d S e r v e ( " l o c a l h o s t : 8 0 8 0 " , n i l ) ) } f u n c h a n d l e H e l l o ( w h t t p . R e s p o n s e W r i t e r , r e q * h t t p . R e q u e s t ) { l o g . P r i n t l n ( " s e r v i n g " , r e q . U R L ) f m t . F p r i n t l n ( w , " H e l l o , 世界! " ) } Run

Slide 13

Slide 13 text

Mux ServeMux is an HTTP request multiplexer. p a c k a g e m a i n i m p o r t ( " n e t / h t t p " " l o g " " f m t " ) f u n c m a i n ( ) { m u x : = h t t p . N e w S e r v e M u x ( ) m u x . H a n d l e F u n c ( " / h e l l o " , h a n d l e r ) l o g . F a t a l ( h t t p . L i s t e n A n d S e r v e ( " : 8 0 8 0 " , m u x ) ) } f u n c h a n d l e r ( w h t t p . R e s p o n s e W r i t e r , r * h t t p . R e q u e s t ) { f m t . F p r i n t l n ( w , " H e l l o M u x ! " ) } Run

Slide 14

Slide 14 text

Needs for REST API Routing Middleware Authentication CORS Hot code reloading Easy db access Context sharing Logging

Slide 15

Slide 15 text

Standard packages net/http (routing, middleware, auth, CORS) log

Slide 16

Slide 16 text

Web Frameworks Martini Gin Revel

Slide 17

Slide 17 text

3rd Party Packages negroni (Middleware) codegangsta/gin (Hot code reload) jmorion/sqlx rs/cors markbates/goth gorilla/pat gorilla/context

Slide 18

Slide 18 text

Gorilla Toolkit gorillatoolkit.org/ (http://gorillatoolkit.org/)

Slide 19

Slide 19 text

Go tools godoc.org/golang.org/x/tools (https://godoc.org/golang.org/x/tools) go fmt go vet go present

Slide 20

Slide 20 text

Go Mobile godoc.org/golang.org/x/mobile (https://godoc.org/golang.org/x/mobile)

Slide 21

Slide 21 text

Thank you Burak AYDIN 4PPS [email protected] (mailto:[email protected]) @burakaydn (http://twitter.com/burakaydn)

Slide 22

Slide 22 text

No content