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/booksbooksAPI.Get("/", list)// POST: http://localhost:8080/booksbooksAPI.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 Bookerr := 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",}

