[TOC]
- Quick start
Quick start
# assume the following codes in main.go file$ cat main.go
package mainimport "github.com/kataras/iris/v12"func main() { app := iris.New() booksAPI := app.Party("/books") { booksAPI.Use(iris.Compression) // GET: http://localhost:8080/books booksAPI.Get("/", list) // POST: http://localhost:8080/books booksAPI.Post("/", create) } app.Listen(":8080")}// Book example.type Book struct { Title string `json:"title"`}func list(ctx iris.Context) { books := []Book{ {"Mastering Concurrency in Go"}, {"Go Design Patterns"}, {"Black Hat Go"}, } ctx.JSON(books) // TIP: negotiate the response between server's prioritizes // and client's requirements, instead of ctx.JSON: // ctx.Negotiation().JSON().MsgPack().Protobuf() // ctx.Negotiate(books)}func create(ctx iris.Context) { var b Book err := ctx.ReadJSON(&b) // TIP: use ctx.ReadBody(&b) to bind // any type of incoming data instead. if err != nil { ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem(). Title("Book creation failure").DetailErr(err)) // TIP: use ctx.StopWithError(code, err) when only // plain text responses are expected on errors. return } println("Received Book: " + b.Title) ctx.StatusCode(iris.StatusCreated)}
MVC equivalent:
import "github.com/kataras/iris/v12/mvc"
m := mvc.New(booksAPI)m.Handle(new(BookController))
type BookController struct { /* dependencies */}// GET: http://localhost:8080/booksfunc (c *BookController) Get() []Book { return []Book{ {"Mastering Concurrency in Go"}, {"Go Design Patterns"}, {"Black Hat Go"}, }}// POST: http://localhost:8080/booksfunc (c *BookController) Post(b Book) int { println("Received Book: " + b.Title) return iris.StatusCreated}
Run your Iris web server:
$ go run main.go> Now listening on: http://localhost:8080> Application started. Press CTRL+C to shut down.
List Books:
$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books[ { "title": "Mastering Concurrency in Go" }, { "title": "Go Design Patterns" }, { "title": "Black Hat Go" }]
Create a new Book:
$ curl -i -X POST \--header 'Content-Encoding:gzip' \--header 'Content-Type:application/json' \--data "{\"title\":\"Writing An Interpreter In Go\"}" \http://localhost:8080/books> HTTP/1.1 201 Created
That’s how an error response looks like:
$ curl -X POST --data "{\"title\" \"not valid one\"}" \http://localhost:8080/books> HTTP/1.1 400 Bad Request{ "status": 400, "title": "Book creation failure" "detail": "invalid character '\"' after object key",}
