forked from labstack/echo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* docs: edit on github Signed-off-by: Vishal Rana <[email protected]> * updated docs Signed-off-by: Vishal Rana <[email protected]> * cleaner Context#Param Signed-off-by: Vishal Rana <[email protected]> * updated website Signed-off-by: Vishal Rana <[email protected]> * updated website Signed-off-by: Vishal Rana <[email protected]>
- Loading branch information
Showing
27 changed files
with
94 additions
and
429 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,267 +22,7 @@ | |
|
||
![Performance](https://i.imgur.com/F2V7TfO.png) | ||
|
||
## Quick Start | ||
|
||
### Installation | ||
|
||
```sh | ||
$ go get -u github.com/labstack/echo | ||
``` | ||
|
||
### Hello, World! | ||
|
||
Create `server.go` | ||
|
||
```go | ||
package main | ||
|
||
import ( | ||
"net/http" | ||
|
||
"github.com/labstack/echo" | ||
) | ||
|
||
func main() { | ||
e := echo.New() | ||
e.GET("/", func(c echo.Context) error { | ||
return c.String(http.StatusOK, "Hello, World!") | ||
}) | ||
e.Logger.Fatal(e.Start(":1323")) | ||
} | ||
``` | ||
|
||
Start server | ||
|
||
```sh | ||
$ go run server.go | ||
``` | ||
|
||
Browse to [http://localhost:1323](http://localhost:1323) and you should see | ||
Hello, World! on the page. | ||
|
||
### Routing | ||
|
||
```go | ||
e.POST("/users", saveUser) | ||
e.GET("/users/:id", getUser) | ||
e.PUT("/users/:id", updateUser) | ||
e.DELETE("/users/:id", deleteUser) | ||
``` | ||
|
||
### Path Parameters | ||
|
||
```go | ||
// e.GET("/users/:id", getUser) | ||
func getUser(c echo.Context) error { | ||
// User ID from path `users/:id` | ||
id := c.Param("id") | ||
return c.String(http.StatusOK, id) | ||
} | ||
``` | ||
|
||
Browse to http://localhost:1323/users/Joe and you should see 'Joe' on the page. | ||
|
||
### Query Parameters | ||
|
||
`/show?team=x-men&member=wolverine` | ||
|
||
```go | ||
//e.GET("/show", show) | ||
func show(c echo.Context) error { | ||
// Get team and member from the query string | ||
team := c.QueryParam("team") | ||
member := c.QueryParam("member") | ||
return c.String(http.StatusOK, "team:" + team + ", member:" + member) | ||
} | ||
``` | ||
|
||
Browse to http://localhost:1323/show?team=x-men&member=wolverine and you should see 'team:x-men, member:wolverine' on the page. | ||
|
||
### Form `application/x-www-form-urlencoded` | ||
|
||
`POST` `/save` | ||
|
||
name | value | ||
:--- | :--- | ||
name | Joe Smith | ||
email | [email protected] | ||
|
||
|
||
```go | ||
// e.POST("/save", save) | ||
func save(c echo.Context) error { | ||
// Get name and email | ||
name := c.FormValue("name") | ||
email := c.FormValue("email") | ||
return c.String(http.StatusOK, "name:" + name + ", email:" + email) | ||
} | ||
``` | ||
|
||
Run the following command: | ||
|
||
```sh | ||
$ curl -F "name=Joe Smith" -F "[email protected]" http://localhost:1323/save | ||
// => name:Joe Smith, email:[email protected] | ||
``` | ||
|
||
### Form `multipart/form-data` | ||
|
||
`POST` `/save` | ||
|
||
name | value | ||
:--- | :--- | ||
name | Joe Smith | ||
avatar | avatar | ||
|
||
```go | ||
func save(c echo.Context) error { | ||
// Get name | ||
name := c.FormValue("name") | ||
// Get avatar | ||
avatar, err := c.FormFile("avatar") | ||
if err != nil { | ||
return err | ||
} | ||
|
||
// Source | ||
src, err := avatar.Open() | ||
if err != nil { | ||
return err | ||
} | ||
defer src.Close() | ||
|
||
// Destination | ||
dst, err := os.Create(avatar.Filename) | ||
if err != nil { | ||
return err | ||
} | ||
defer dst.Close() | ||
|
||
// Copy | ||
if _, err = io.Copy(dst, src); err != nil { | ||
return err | ||
} | ||
|
||
return c.HTML(http.StatusOK, "<b>Thank you! " + name + "</b>") | ||
} | ||
``` | ||
|
||
Run the following command. | ||
```sh | ||
$ curl -F "name=Joe Smith" -F "avatar=@/path/to/your/avatar.png" http://localhost:1323/save | ||
// => <b>Thank you! Joe Smith</b> | ||
``` | ||
|
||
For checking uploaded image, run the following command. | ||
|
||
```sh | ||
cd <project directory> | ||
ls avatar.png | ||
// => avatar.png | ||
``` | ||
|
||
### Handling Request | ||
|
||
- Bind `JSON` or `XML` or `form` payload into Go struct based on `Content-Type` request header. | ||
- Render response as `JSON` or `XML` with status code. | ||
|
||
```go | ||
type User struct { | ||
Name string `json:"name" xml:"name" form:"name"` | ||
Email string `json:"email" xml:"email" form:"email"` | ||
} | ||
|
||
e.POST("/users", func(c echo.Context) error { | ||
u := new(User) | ||
if err := c.Bind(u); err != nil { | ||
return err | ||
} | ||
return c.JSON(http.StatusCreated, u) | ||
// or | ||
// return c.XML(http.StatusCreated, u) | ||
}) | ||
``` | ||
|
||
### Static Content | ||
|
||
Server any file from static directory for path `/static/*`. | ||
|
||
```go | ||
e.Static("/static", "static") | ||
``` | ||
|
||
##### [Learn More](https://echo.labstack.com/guide/static-files) | ||
|
||
### [Template Rendering](https://echo.labstack.com/guide/templates) | ||
|
||
### Middleware | ||
|
||
```go | ||
// Root level middleware | ||
e.Use(middleware.Logger()) | ||
e.Use(middleware.Recover()) | ||
|
||
// Group level middleware | ||
g := e.Group("/admin") | ||
g.Use(middleware.BasicAuth(func(username, password string) bool { | ||
if username == "joe" && password == "secret" { | ||
return true | ||
} | ||
return false | ||
})) | ||
|
||
// Route level middleware | ||
track := func(next echo.HandlerFunc) echo.HandlerFunc { | ||
return func(c echo.Context) error { | ||
println("request to /users") | ||
return next(c) | ||
} | ||
} | ||
e.GET("/users", func(c echo.Context) error { | ||
return c.String(http.StatusOK, "/users") | ||
}, track) | ||
``` | ||
|
||
#### Built-in Middleware | ||
|
||
Middleware | Description | ||
:--- | :--- | ||
[BodyLimit](https://echo.labstack.com/middleware/body-limit) | Limit request body | ||
[Logger](https://echo.labstack.com/middleware/logger) | Log HTTP requests | ||
[Recover](https://echo.labstack.com/middleware/recover) | Recover from panics | ||
[Gzip](https://echo.labstack.com/middleware/gzip) | Send gzip HTTP response | ||
[BasicAuth](https://echo.labstack.com/middleware/basic-auth) | HTTP basic authentication | ||
[JWTAuth](https://echo.labstack.com/middleware/jwt) | JWT authentication | ||
[Secure](https://echo.labstack.com/middleware/secure) | Protection against attacks | ||
[CORS](https://echo.labstack.com/middleware/cors) | Cross-Origin Resource Sharing | ||
[CSRF](https://echo.labstack.com/middleware/csrf) | Cross-Site Request Forgery | ||
[HTTPSRedirect](https://echo.labstack.com/middleware/redirect#httpsredirect-middleware) | Redirect HTTP requests to HTTPS | ||
[HTTPSWWWRedirect](https://echo.labstack.com/middleware/redirect#httpswwwredirect-middleware) | Redirect HTTP requests to WWW HTTPS | ||
[WWWRedirect](https://echo.labstack.com/middleware/redirect#wwwredirect-middleware) | Redirect non WWW requests to WWW | ||
[NonWWWRedirect](https://echo.labstack.com/middleware/redirect#nonwwwredirect-middleware) | Redirect WWW requests to non WWW | ||
[AddTrailingSlash](https://echo.labstack.com/middleware/trailing-slash#addtrailingslash-middleware) | Add trailing slash to the request URI | ||
[RemoveTrailingSlash](https://echo.labstack.com/middleware/trailing-slash#removetrailingslash-middleware) | Remove trailing slash from the request URI | ||
[MethodOverride](https://echo.labstack.com/middleware/method-override) | Override request method | ||
|
||
##### [Learn More](https://echo.labstack.com/middleware/overview) | ||
|
||
#### Third-party Middleware | ||
|
||
Middleware | Description | ||
:--- | :--- | ||
[echoperm](https://github.com/xyproto/echoperm) | Keeping track of users, login states and permissions. | ||
[echopprof](https://github.com/mtojek/echopprof) | Adapt net/http/pprof to labstack/echo. | ||
|
||
### Next | ||
|
||
- Head over to [guide](https://echo.labstack.com/guide/installation) | ||
- Browse [recipes](https://echo.labstack.com/recipes/hello-world) | ||
|
||
### Need help? | ||
|
||
- [Hop on to chat](https://gitter.im/labstack/echo) | ||
- [Open an issue](https://github.com/labstack/echo/issues/new) | ||
## Get Started [] | ||
|
||
## Support Us | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.