شروع کردن با چارچوب وب Go Iris

نصب

توجه: نیاز به نسخه 1.20 یا بالاتر Go است.

$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest

آن را در کد خود وارد کنید:

import "github.com/kataras/iris/v12"

رفع مشکلات نصب

اگر هنگام نصب، خطاهای شبکه را مواجه شدید، اطمینان حاصل کنید که متغیر محیطی GOPROXY به یک مقدار معتبر تنظیم شده باشد.

go env -w GOPROXY=https://goproxy.io,direct

اگر روش‌های فوق مشکل را حل نکرد، حافظه نهان ماژول go را پاک کنید:

go clean --modcache

شروع سریع

حالت عملکردی

$ cat main.go
package main

import "github.com/kataras/iris/v12"

func main() {
    // تعریف نمونه iris
    app := iris.New()

    // تعریف یک گروه مسیر، (اینجا یک گروه مسیر با پیشوند /books تعریف می‌کند)
    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")
}

// مثال کتاب
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)
    // توجه: مذاکره پاسخ بر اساس اولویت سرور و ترجیح مشتری استفاده از ctx.JSON بجای:
    // ctx.Negotiation().JSON().MsgPack().Protobuf()
    // ctx.Negotiate(books)
}

func create(ctx iris.Context) {
    var b Book
    err := ctx.ReadJSON(&b)
    // توجه: استفاده از ctx.ReadBody(&b) برای اتصال داده ورودی هر نوعی.
    if err != nil {
        ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
            Title("Failed to create book").DetailErr(err))
        // توجه: استفاده از ctx.StopWithError(code, err) در صورت انتظار پاسخ متن ساده فقط در صورت خطا است.
        return
    }

    println("Received book: " + b.Title)

    ctx.StatusCode(iris.StatusCreated)
}

الگوی معماری MVC

وارد کردن پکیج MVC

import "github.com/kataras/iris/v12/mvc"

راه‌اندازی کنترل‌کننده براساس گروه مسیر

m := mvc.New(booksAPI)
m.Handle(new(BookController))

پیاده‌سازی کنترل‌کننده

type BookController struct {
    /* تزریق وابستگی */
}

// پاسخ به GET: http://localhost:8080/books
func (c *BookController) Get() []Book {
    return []Book{
        {"تسلط بر همزمانی Go"},
        {"الگوهای طراحی Go"},
        {"Go سیاه"},
    }
}

// پاسخ به POST: http://localhost:8080/books
func (c *BookController) Post(b Book) int {
    println("کتاب دریافت شده: " + b.Title)

    return iris.StatusCreated
}

اجرا سرور وب Iris شما:

$ go run main.go
> در حال گوش دادن به: http://localhost:8080
> برنامه‌ به راه‌اندازی رسید. برای خاموش‌سازی، CTRL+C را فشار دهید.

لیست کتاب‌ها:

$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books

[
  {
    "title": "تسلط بر همزمانی Go"
  },
  {
    "title": "الگوهای طراحی Go"
  },
  {
    "title": "Go سیاه"
  }
]

ایجاد یک کتاب جدید:

$ curl -i -X POST \
--header 'Content-Encoding:gzip' \
--header 'Content-Type:application/json' \
--data "{\"title\":\"نوشتن یک مفسر در Go\"}" \
http://localhost:8080/books

> HTTP/1.1 201 Created

این یک مثال از پاسخ خطا است:

$ curl -X POST --data "{\"title\": \"کتاب نامعتبر\"}" \
http://localhost:8080/books

> HTTP/1.1 400 Bad Request

{
  "status": 400,
  "title": "شکست ایجاد کتاب",
  "detail": "invalid character '\"' after object key"
}