115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Go Web
 | |
| 
 | |
| **Go Web** is a framework for micro service web development.
 | |
| 
 | |
| ## Overview
 | |
| 
 | |
| Go Web provides a tiny HTTP web server library which leverages [go-micro](https://github.com/micro/go-micro) to create 
 | |
| micro web services as first class citizens in a microservice world. It wraps go-micro to give you service discovery, 
 | |
| heartbeating and the ability to create web apps as microservices.
 | |
| 
 | |
| ## Features
 | |
| 
 | |
| - **Service Discovery** - Services are automatically registered in service discovery on startup. Go Web includes 
 | |
| a http.Client with pre-initialised roundtripper which makes use of service discovery so you can use service names.
 | |
| 
 | |
| - **Heartbeating** - Go Web apps will periodically heartbeat with service discovery to provide liveness updates. 
 | |
| In the event a service fails it will be removed from the registry after a pre-defined expiry time.
 | |
| 
 | |
| - **Custom Handlers** - Specify your own http router for handling requests. This allows you to maintain full 
 | |
| control over how you want to route to internal handlers.
 | |
| 
 | |
| - **Static Serving** - Go Web automatically detects a local static `html` dir and serves files if no route handler 
 | |
| is specified. A quick solution for those who want to write JS web apps as microservices.
 | |
| 
 | |
| ## Getting Started
 | |
| 
 | |
| - [Dependencies](#dependencies)
 | |
| - [Usage](#usage)
 | |
| - [Set Handler](#set-handler)
 | |
| - [Call Service](#call-service)
 | |
| - [Static Files](#static-files)
 | |
| 
 | |
| ## Dependencies
 | |
| 
 | |
| Go Web makes use of Go Micro which means it needs service discovery
 | |
| 
 | |
| See the [go-micro](https://github.com/micro/go-micro#service-discovery) for install instructions
 | |
| 
 | |
| For a quick start use consul
 | |
| 
 | |
| ```
 | |
| # install
 | |
| brew install consul
 | |
| 
 | |
| # run
 | |
| consul agent -dev
 | |
| ```
 | |
| 
 | |
| ## Usage
 | |
| 
 | |
| ```go
 | |
| service := web.NewService(
 | |
| 	web.Name("example.com"),
 | |
| )
 | |
| 
 | |
| service.HandleFunc("/foo", fooHandler)
 | |
| 
 | |
| if err := service.Init(); err != nil {
 | |
| 	log.Fatal(err)
 | |
| }
 | |
| 
 | |
| if err := service.Run(); err != nil {
 | |
| 	log.Fatal(err)
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Set Handler
 | |
| 
 | |
| You might have a preference for a HTTP handler, so use something else. This loses the ability to register endpoints in discovery 
 | |
| but we'll fix that soon.
 | |
| 
 | |
| ```go
 | |
| import "github.com/gorilla/mux"
 | |
| 
 | |
| r := mux.NewRouter()
 | |
| r.HandleFunc("/", indexHandler)
 | |
| r.HandleFunc("/objects/{object}", objectHandler)
 | |
| 
 | |
| service := web.NewService(
 | |
| 	web.Handler(r)
 | |
| )
 | |
| ```
 | |
| 
 | |
| ## Call Service
 | |
| 
 | |
| Go-web includes a http.Client with a custom http.RoundTripper that uses service discovery
 | |
| 
 | |
| ```go
 | |
| c := service.Client()
 | |
| 
 | |
| rsp, err := c.Get("http://example.com/foo")
 | |
| ```
 | |
| 
 | |
| This will lookup service discovery for the service `example.com` and route to one of the available nodes.
 | |
| 
 | |
| ## Static Files
 | |
| 
 | |
| Go web was always meant as a way to register web apps where the majority of the code would be written in JS. To enable that by default, if no handler is registered on "/" and we find a local "html" directory then static files will be served.
 | |
| 
 | |
| You will see a log output like so.
 | |
| 
 | |
| ```
 | |
| 2019/05/12 14:55:47 Enabling static file serving from /tmp/foo/html
 | |
| ```
 | |
| 
 | |
| If you want to set this path manually use the StaticDir option. If a relative path is specified we will use os.Getwd() and prefix this.
 | |
| 
 | |
| ```
 | |
| service := web.NewService(
 | |
| 	web.Name("example.com"),
 | |
| 	web.StaticDir("/tmp/example.com/html"),
 | |
| )
 | |
| 
 | |
| ```
 |