[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",}