Creating an endpoint with gover is very simple. All you need to do is call the Endpoint
method with the wanted path.
ep := gover.Endpoint("/api")
To handle requests all you need to do is call the method on the endpoint instance which is corresponding the http method you want to use.
Example:
ep := gover.Endpoint("/api")
//handling a GET method on /api
ep.Get(func(w http.ResponseWriter, r *http.Request, md map[string]interface{}) {
w.Write([]byte("You used a GET method"))
})
//handling a POST method on /api
ep.Post(func(w http.ResponseWriter, r *http.Request, md map[string]interface{}) {
w.Write([]byte("You used a POST method"))
})
To add a middleware function to a handler, just chain the Middleware
method to the previous method we called.
The middleware must return a Boolean. The Boolean represents wherever the middleware passed.
Example:
ep := gover.Endpoint("/api")
//handling a get method on /api with a middlware
ep.
Get(func(w http.ResponseWriter, r *http.Request, md map[string]interface{}) {
w.Write([]byte("You used a GET method"))
}).
Middleware(func(w http.ResponseWriter, r *http.Request, md *gover.MiddlewareData) bool {
//this middlware passes
w.Write([]byte("This requests was not stopped by the middleware \n"))
return true
})
//handling a post method on /api with a middlware
ep.
Post(func(w http.ResponseWriter, r *http.Request, md map[string]interface{}) {
w.Write([]byte("You used a POST method"))
}).
Middleware(func(w http.ResponseWriter, r *http.Request, md *gover.MiddlewareData) bool {
//this middleware fails
w.Write([]byte("This requests was stopped by the middleware"))
return false
})
In the middlware you get a pointer to a map. On that map you can store data that will be accessible from the handler.
Example:
ep := gover.Endpoint("/api")
//handling a get method on /api
ep.
Get(func(w http.ResponseWriter, r *http.Request, md map[string]interface{}) {
n := md["name"]
ln := md["last-name"]
fmt.Println(n, ln) // output: ilay bokobza
}).
Middleware(func(w http.ResponseWriter, r *http.Request, md *gover.MiddlewareData) bool {
//passing data
(*md)["name"] = "ilay"
(*md)["last-name"] = "bokobza"
return true
})
Doing what we did so far will not actually create an endpoint. All it does is store all that information without doing actually creating an endpoint. Activating the endpoint is easy. All we need to do is call the Create
method on the endpoint instance after declaring the handlers. NOTE: Any handlers created after you called the create method will not register.
Example:
ep := gover.Endpoint("/api")
//handling a get method on /api
ep.Get(func(w http.ResponseWriter, r *http.Request, md map[string]interface{}) {
w.Write([]byte("You used a GET method"))
})
ep.Create()
To host a static storage bin website, all you need to do is call the HostFolder
method with the path to the folder you want to host and the url path you want is hosted on.
Example:
gover.HostFolder("/","public")
This method is just a wapper for the normal way of doing it in go.
To Host a SPA (Signal Page Application) app, you need to call the HostSPA
method with the folder path as the argument.
Example:
gover.HostSPA("public")
This code will host a spa application and will only allow up 3 folders long URLs.
Gover have some nice utilities to make your life easier. They are not necessary, but they are nice to have.
This method will allow you to easily parse the json out of request body. This method returns a map[string]interface{}
and an error
.
Example:
ep := gover.Endpoint("/api")
//handling a get method on /api
ep.Get(func(w http.ResponseWriter, r *http.Request, md map[string]interface{}) {
bodyData, err := gover.DynamicJSONBodyParser(r.Body)
if err != nil {
log.Println(err)
return
}
fmt.Println(bodyData)
})
ep.Create()
The Listen
method will start the server and log the port which is running on. This method is just a wrapper for http.ListenAndServe()
.
Example:
port := 3000
gover.Listen(port)
Gover has an useful method that allows you to get the file from the request very easily.The GetFile
method revives two arguments. The first one is the fieldname
, and the second one is the request.
The fieldname
is name property of the file input in your HTML form.
For Example: This is your HTML form
<form>
<input type="file" name="myFile" />
<button>Submit</button>
</form>
you will need to pass to the "myFile"
to the fieldname
parameter.
Code Example:
ep := gover.Endpoint("/upload")
ep.Post(func(w http.ResponseWriter, r *http.Request, md map[string]interface{}) {
data, handler, err := gover.GetFile("myFile", r)
if err != nil {
fmt.Println(err)
return
}
ioutil.WriteFile(handler.Filename, data, 0666)
})
ep.Create()