Skip to content

Latest commit

 

History

History
686 lines (532 loc) · 48 KB

README_tr.md

File metadata and controls

686 lines (532 loc) · 48 KB

Fiber

Fiber, Go için en hızlı HTTP sunucusu olan Fasthttp üzerine inşa edilmiş ve Express'ten ilham almış bir web framework'üdür. Sıfır bellek ataması ve performans göz önünde bulundurularak hızlı geliştirme ve kolay geliştirme için tasarlanmıştır.

⚡️ Hızlı Başlangıç

package main

import "github.com/gofiber/fiber/v2"

func main() {
    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World 👋!")
    })

    app.Listen(":3000")
}

🤖 Performans Ölçümleri

Bu testler TechEmpower ve Go Web tarafından gerçekleştirildi. Bütün sonuçları görmek için lütfen Wiki sayfasını ziyaret ediniz.

⚙️ Kurulum

Go'nun 1.17 sürümü (indir) veya daha yüksek bir sürüm gerekli.

Bir dizin oluşturup dizinin içinde go mod init github.com/your/repo komutunu yazarak projenizi geliştirmeye başlayın (daha fazla öğren). Ardından Fiber'ı kurmak için go get komutunu çalıştırın:

go get -u github.com/gofiber/fiber/v2

🎯 Özellikler

💡 Felsefe

Node.js'ten Go'ya geçen yeni gopherlar kendi web uygulamalarını ve mikroservislerini yazmaya başlamadan önce dili öğrenmek ile uğraşıyorlar. Fiber, bir framework olarak, minimalizm ve UNIX yolunu izleme fikri ile oluşturuldu. Böylece yeni gopherlar sıcak ve güvenilir bir hoş geldin ile Go dünyasına giriş yapabilirler.

Fiber, internet üzerinde en popüler web framework'ü olan Express'ten esinlenmiştir. Biz Express'in kolaylığını ve Go'nun ham performansını birleştirdik. Daha önce Node.js üzerinde (Express veya benzerini kullanarak) bir web uygulaması geliştirdiyseniz, pek çok metod ve prensip size oldukça tanıdık gelecektir.

⚠️ Sınırlamalar

  • Fiber unsafe kullanımı sebebiyle Go'nun son sürümüyle her zaman uyumlu olmayabilir. Fiber 2.40.0, Go 1.17 ile 1.21 sürümleriyle test edildi.
  • Fiber net/http arabirimiyle uyumlu değildir. Yani gqlgen veya go-swagger gibi net/http ekosisteminin parçası olan projeleri kullanamazsınız.

👀 Örnekler

Aşağıda yaygın örneklerden bazıları listelenmiştir. Daha fazla kod örneği görmek için lütfen Github reposunu veya API dokümantasyonunu ziyaret ediniz.

func main() {
    app := fiber.New()

    // GET /api/kayit
    app.Get("/api/*", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("✋ %s", c.Params("*"))
        return c.SendString(msg) // => ✋ kayit
    })

    // GET /flights/IST-ESB
    app.Get("/flights/:kalkis-:inis", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("💸 Kalkış: %s, İniş: %s", c.Params("kalkis"), c.Params("inis"))
        return c.SendString(msg) // => 💸 Kalkış: IST, İniş: ESB
    })

    // GET /sozluk.txt
    app.Get("/:file.:ext", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("📃 %s.%s", c.Params("file"), c.Params("ext"))
        return c.SendString(msg) // => 📃 sozluk.txt
    })

    // GET /muhittin/75
    app.Get("/:isim/:yas/:cinsiyet?", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("👴 %s %s yaşında", c.Params("isim"), c.Params("yas"))
        return c.SendString(msg) // => 👴 muhittin 75 yaşında
    })

    // GET /muhittin
    app.Get("/:isim", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("Merhaba, %s 👋!", c.Params("isim"))
        return c.SendString(msg) // => Merhaba Muhittin 👋!
    })

    log.Fatal(app.Listen(":3000"))
}
func main() {
    app := fiber.New()

    // GET /api/register
    app.Get("/api/*", func(c *fiber.Ctx) error {
        msg := fmt.Sprintf("✋ %s", c.Params("*"))
        return c.SendString(msg) // => ✋ kayit
    }).Name("api")

    data, _ := json.MarshalIndent(app.GetRoute("api"), "", "  ")
    fmt.Print(string(data))
    // Cikti:
    // {
    //    "method": "GET",
    //    "name": "api",
    //    "path": "/api/*",
    //    "params": [
    //      "*1"
    //    ]
    // }


    log.Fatal(app.Listen(":3000"))
}
func main() {
    app := fiber.New()

    app.Static("/", "./public")
    // => http://localhost:3000/js/script.js
    // => http://localhost:3000/css/style.css

    app.Static("/prefix", "./public")
    // => http://localhost:3000/prefix/js/script.js
    // => http://localhost:3000/prefix/css/style.css

    app.Static("*", "./public/index.html")
    // => http://localhost:3000/any/path/shows/index/html

    log.Fatal(app.Listen(":3000"))
}
func main() {
	app := fiber.New()

	// Bütün routelara etki eder.
	app.Use(func(c *fiber.Ctx) error {
		fmt.Println("🥇 İlk handler")
		return c.Next()
	})

	// /api ile başlayan bütün routelara etki eder.
	app.Use("/api", func(c *fiber.Ctx) error {
		fmt.Println("🥈 İkinci handler")
		return c.Next()
	})

	// GET /api/register
	app.Get("/api/list", func(c *fiber.Ctx) error {
		fmt.Println("🥉 Son handler")
		return c.SendString("Merhaba, Dünya 👋!")
	})

	log.Fatal(app.Listen(":3000"))
}
📚 Daha fazla kod örneği göster

View Motorları

📖 Yapılandırma 📖 Motorlar 📖 Render

Hiçbir View Motoru ayarlanmadığında Fiber varsayılan olarak html/template'a geçer.

Kısmi yürütmek istiyorsanız veya amber, handlebars, mustache veya pug gibi farklı motorlar kullanmak istiyorsanız

Çoklu View Engine destekleyen [Template'ımıza](https://github.com/gofiber/template göz atın.

package main

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/template/pug"
)

func main() {
    // Uygulamayı başlatmadan önce View Engine tanımlayabilirsiniz:
    app := fiber.New(fiber.Config{
        Views: pug.New("./views", ".pug"),
    })

    // Ve şimdi `./views/home.pug` templateni şu şekilde çağırabilirsiniz:
    app.Get("/", func(c *fiber.Ctx) error {
        return c.Render("home", fiber.Map{
            "title": "Homepage",
            "year":  1999,
        })
    })

    log.Fatal(app.Listen(":3000"))
}

Routeları Zincirler Halinde Gruplama

📖 Group

func middleware(c *fiber.Ctx) error {
    fmt.Println("Beni umursama!")
    return c.Next()
}

func handler(c *fiber.Ctx) error {
    return c.SendString(c.Path())
}

func main() {
    app := fiber.New()

    // Root API route
    api := app.Group("/api", middleware) // /api

    // API v1 routeları
    v1 := api.Group("/v1", middleware) // /api/v1
    v1.Get("/list", handler)           // /api/v1/list
    v1.Get("/user", handler)           // /api/v1/user

    // API v2 routeları
    v2 := api.Group("/v2", middleware) // /api/v2
    v2.Get("/list", handler)           // /api/v2/list
    v2.Get("/user", handler)           // /api/v2/user

    // ...
}

Middleware Loglama (Logger)

📖 Logger

package main

import (
	"fmt"

	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/logger"
)

func main() {
	app := fiber.New()

	app.Use(logger.New())

	// ...

	log.Fatal(app.Listen(":3000"))
}

Farklı Originler Arası Kaynak Paylaşımı (CORS)

📖 CORS

import (
    "log"

    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/cors"
)

func main() {
    app := fiber.New()

    app.Use(cors.New())

    // ...

    log.Fatal(app.Listen(":3000"))
}

Origin başlığı içinde herhangi bir alan adı kullanarak CORS'u kontrol edin:

curl -H "Origin: http://example.com" --verbose http://localhost:3000

Özelleştirilebilir 404 yanıtları

📖 HTTP Methodları

func main() {
    app := fiber.New()

    app.Static("/", "./public")

    app.Get("/demo", func(c *fiber.Ctx) error {
        return c.SendString("Bu bir demodur!")
    })

    app.Post("/register", func(c *fiber.Ctx) error {
        return c.SendString("Hoşgeldiniz!")
    })

    // Hiçbir endpointle eşleşmezse gideceği middleware ve yanıtı.
    app.Use(func(c *fiber.Ctx) error {
        return c.SendStatus(404)
        // => 404 "Sayfa bulunamadı"
    })

    log.Fatal(app.Listen(":3000"))
}

JSON Yanıtları

📖 JSON

type User struct {
    Isim string `json:"name"`
    Yas  int    `json:"age"`
}

func main() {
    app := fiber.New()

    app.Get("/user", func(c *fiber.Ctx) error {
        return c.JSON(&User{"Muhittin Topalak", 20})
        // => {"Isim":"Muhittin Topalak", "Yas":20}
    })

    app.Get("/json", func(c *fiber.Ctx) error {
        return c.JSON(fiber.Map{
            "success": true,
            "mesaj": "Merhaba Muhittin Topalak!",
        })
        // => {"success":true, "message":"Merhaba Muhittin Topalak!"}
    })

    log.Fatal(app.Listen(":3000"))
}

WebSocket Desteği

📖 Websocket

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/websocket"
)

func main() {
  app := fiber.New()

  app.Get("/ws", websocket.New(func(c *websocket.Conn) {
    for {
      mt, msg, err := c.ReadMessage()
      if err != nil {
        log.Println("read:", err)
        break
      }
      log.Printf("recv: %s", msg)
      err = c.WriteMessage(mt, msg)
      if err != nil {
        log.Println("write:", err)
        break
      }
    }
  }))

  log.Fatal(app.Listen(":3000"))
  // ws://localhost:3000/ws
}

Server-Sent Eventler

📖 Daha Fazla Bilgi

import (
    "github.com/gofiber/fiber/v2"
    "github.com/valyala/fasthttp"
)

func main() {
  app := fiber.New()

  app.Get("/sse", func(c *fiber.Ctx) error {
    c.Set("Content-Type", "text/event-stream")
    c.Set("Cache-Control", "no-cache")
    c.Set("Connection", "keep-alive")
    c.Set("Transfer-Encoding", "chunked")

    c.Context().SetBodyStreamWriter(fasthttp.StreamWriter(func(w *bufio.Writer) {
      fmt.Println("WRITER")
      var i int

      for {
        i++
        msg := fmt.Sprintf("%d - the time is %v", i, time.Now())
        fmt.Fprintf(w, "data: Message: %s\n\n", msg)
        fmt.Println(msg)

        w.Flush()
        time.Sleep(5 * time.Second)
      }
    }))

    return nil
  })

  log.Fatal(app.Listen(":3000"))
}

Middleware Kurtarıcısı

📖 Recover

import (
    "github.com/gofiber/fiber/v2"
    "github.com/gofiber/fiber/v2/middleware/recover"
)

func main() {
    app := fiber.New()

    app.Use(recover.New())

    app.Get("/", func(c *fiber.Ctx) error {
        panic("normalde bu uygulamanızı çökertir.")
    })

    log.Fatal(app.Listen(":3000"))
}

🧬 Dahili Middlewarelar

Fiber'a dahil edilen middlewareların bir listesi aşağıda verilmiştir.

Middleware Açıklama
basicauth Basic auth middleware'ı, bir HTTP Basic auth sağlar. Geçerli kimlik bilgileri için sonraki handlerı ve eksik veya geçersiz kimlik bilgileri için 401 döndürür.
cache Reponseları durdur ve önbelleğe al.
compress Fiber için sıkıştırma middleware, varsayılan olarak deflate, gzip ve brotliyi destekler.
cors Çeşitli seçeneklerle başlangıçlar arası kaynak paylaşımını (CORS) etkinleştirin.
csrf CSRF exploitlerinden korunun.
encryptcookie Encrypt middleware'ı cookie değerlerini şifreler.
envvar Environment değişkenlerini belirtilen ayarlara göre dışarıya açar.
etag ETag middleware'ı sayfa içeriği değişmediyse bant genişliğini daha verimli kullanmak için tam sayfa içeriğini tekrar göndermez.
expvar Expvar middleware, HTTP serverinin bazı runtime değişkenlerini JSON formatında sunar.
favicon Bir dosya yolu sağlanmışsa, loglardaki favicon'u yoksayar veya bellekten sunar.
filesystem Fiber için FileSystem middleware, Alireza Salary'e özel teşekkürler.
limiter Fiber için hız sınırlayıcı middleware'i. Açık API'lere ve/veya parola sıfırlama gibi endpointlere yönelik tekrarlanan istekleri sınırlamak için kullanın.
logger HTTP istek/yanıt logger'ı.
monitor Monitor middleware'ı sunucu metriklerini rapor eder, express-status-monitor'den esinlenildi.
pprof Matthew Lee'ye özel teşekkürler (@mthli).
proxy Birden çok sunucuya proxy istekleri yapmanızı sağlar.
recover Recover middleware'i, stack chain'ini herhangi bir yerindeki paniklerden kurtulur ve kontrolü merkezileştirilmiş ErrorHandler'e verir.
requestid Her requeste id verir.
session Session için middleware. NOTE: Bu middleware Fiber'in Storage yapısını kullanır.
skip Skip middleware'ı verilen koşul true olduğunda handler'ı atlar ve işlemez.
timeout Bir request için maksimum süre ekler ve aşılırsa ErrorHandler'a iletir.
keyauth Key auth middleware, key tabanlı bir authentication sağlar.
redirect Yönlendirme middleware 'ı.
rewrite Rewrite middleware, sağlanan kurallara göre URL yolunu yeniden yazar. Geriye dönük uyumluluk için veya yalnızca daha temiz ve daha açıklayıcı bağlantılar oluşturmak için yardımcı olabilir.
adaptor Fiber request handlerdan net/http handlerları için dönüştürücü, @arsmn'a özel teşekkürler!
helmet Çeşitli HTTP headerları ayarlayarak uygulamalarınızın güvenliğini sağlamaya yardımcı olur.

🧬 Harici Middlewarelar

Harici olarak barındırılan middlewareların modüllerinin listesi. Bu middlewarelar, Fiber ekibi tarafından geliştirilir.

Middleware Açıklama
jwt JWT, bir JSON Web Token (JWT) yetkilendirmesi döndüren middleware.
storage Fiber'in Storage yapısını destekleyen birçok storage driver'ı verir. Bu sayede depolama gerektiren Fiber middlewarelarında kolaylıkla kullanılabilir.
template Bu paket, Fiber v2.x.x, Go sürüm 1.17 veya üzeri gerekli olduğunda kullanılabilecek 9 template motoru içerir.
websocket Yereller desteğiyle Fiber için Fasthttp WebSocket'a dayalıdır!

🕶️ Awesome Listesi

Daha fazla yazı, middleware, örnek veya araç için awesome list reposunu kontrol etmeyi unutmayın.

👍 Destek

Eğer teşekkür etmek veya Fiber'ın aktif geliştirilmesini desteklemek istiyorsanız:

  1. Projeye yıldız verebilirsiniz.
  2. 𝕏 (Twitter) hesabınızdan proje hakkında tweet atabilirsiniz.
  3. Medium, Dev.to veya kişisel blogunuz üzerinden bir inceleme veya eğitici yazı yazabilirsiniz.
  4. Projeye bir fincan kahve bağışlayarak destek olabilirsiniz.

☕ Destekçiler

Fiber; alan adı, gitbook, netlify, serverless yer sağlayıcısı giderleri ve benzeri şeyleri ödemek için bağışlarla yaşayan bir açık kaynaklı projedir. Eğer Fiber'a destek olmak isterseniz, ☕ buradan kahve ısmarlayabilirsiniz.

User Donation
@destari ☕ x 10
@dembygenesis ☕ x 5
@thomasvvugt ☕ x 5
@hendratommy ☕ x 5
@ekaputra07 ☕ x 5
@jorgefuertes ☕ x 5
@candidosales ☕ x 5
@l0nax ☕ x 3
@bihe ☕ x 3
@justdave ☕ x 3
@koddr ☕ x 1
@lapolinar ☕ x 1
@diegowifi ☕ x 1
@ssimk0 ☕ x 1
@raymayemir ☕ x 1
@melkorm ☕ x 1
@marvinjwendt ☕ x 1
@toishy ☕ x 1

‎‍💻 Koda Katkı Sağlayanlar

Code Contributors

⭐️ Projeyi Yıldızlayanlar

Stargazers over time

⚠️ Lisans

Telif (c) 2019-günümüz Fenny ve katkıda bulunanlar. Fiber, MIT Lisansı altında özgür ve açık kaynaklı bir yazılımdır. Resmî logosu Vic Shóstak tarafından tasarlanmıştır ve Creative Commons lisansı altında dağıtımı yapılıyor. (CC BY-SA 4.0 International).

Üçüncü Parti Kütüphane Lisansları