- read

Go Fiber ile REST API’lar Geliştirmek

Ali GÖREN 5

Selamlar. Bu ufak yazıda size Go programlama dili ile geliştirilen Fiber web framework’ü tanıtmak istiyorum.

Bu framework’ü diğer frameworklerden farklı yapan şey nedir? Açıkcası bu işin PR kısmı. Yani ne kadar çok översen o kadar mükemmel olduğuna inandırabilirsin :) Tabii ki bu, diğerleri ile aynı demek anlamına gelmiyor.

Express Benzeri Bir Framework

Eğer daha önce Express Framework ile çalıştıysanız bu framework size hiç de yabancı gelmeyecek. Çünkü tamamen aynı tasarım üzerinden ilerlenmiş. Yani, burada Go dilinin temel dinamiklerini biliyorsanız, bu framework’ü de tıpkı Express kullanır gibi kullanabilirsiniz.

Tıpkı express gibi bu framework’ü de kullanarak hızlıca REST API’lar oluşturabilirsiniz. Tabii bunun yanı sıra bellek yönetimi konusunda da aştıklarını söylemekteler.

Bu tarz frameworklerde en çok merak edilen şey ise proje yapısının nasıl olacağı. Eh, express gibi bir framework dedik haliyle bu framework için de katı kurallı olan, en azından doğrudan bi yapısallık yok. Bunun yerine flexible olma durumu mevcut. Eğer detaylı bir şey öğrenmek isterseniz dokümanlar sayfası altından FAQ bölümüne giderek ilgili açıklama ve örnek projeleri de bulabilirsiniz.

Ekibiniz ya da tekil olarak siz, ne istiyorsanız onu kullanabilirsiniz. Tabii ki bazı yapılar oturtmakta fayda var yoksa koy tek dosya, hallet geç :)

Bu arada projenin GitHub’da aktif bir geliştirme sürecinde olduğunun altını da çizmek isterim.

Routing Yapısı

Yine burada framework’ün routing yapısı express gibi tasarlanmış. Her şey contextler üzerinden ilerliyor, body’ler ya da bodyparserlar havada uçuşuyor falan :) Uzmanlığını express developer olarak gerçekleştirmiş olan node’cunun hiç de yabancılık çekmediği konular bunlar :)

Yine bu framework’ün route grouping mantığı var ki versiyonlama işlemleri açısından gerçekten de sizi mutlu edecek bir özellik.

Template Engine

Bu kısım beni mutlu eden kısım. Birçok template engine burada destekleniyor. Bu mükemmel.

Kurulum

Konuyu çok dallandırmak yerine basitçe bir kurulum gerçekleştirelim. Eğer sisteminizde Go kurulu değilse onu kurmanızı öneririm :)

Daha sonra bir go projesi oluşturalım. Örnek vereyim şöyle olsun;

go mod init github.com/aligoren/go_fiber_project

Daha sonra şu komutu vererek Fiber framework’ ‘ü projeye dahil edelim

go get github.com/gofiber/fiber/v2

Şu anda projemizi geliştirmeye başlayabiliriz. Şu anda tek yapmamız gereken main.go adında bi dosyayı ana dizinde oluşturmak. Bu dosyanın içeriği başlangıç olarak şöyle olsun

import (
"github.com/gofiber/fiber/v2"
"log"
)
func main() {
app := fiber.New()

app.Get("/", func(ctx *fiber.Ctx) error {
return ctx.JSON(fiber.Map{
"message": "hello world!",
})
})

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

Şu anda terminalden ya da favori IDE’nizden go run main.go komutunu verirseniz, yazdığınız ilk REST API’ı ekranda göreceksiniz :)

İşi bir tık ileriye taşıyarak route’ları farklı bir klasör altında tutabiliriz. Mesela ben bu proje için route bilgilerimi routes adında bir klasöre aldım. Burada 2 dosyam oluyor. Birisi routes.go dosyası. İçeriği şöyle oluyor.

package routesimport "github.com/gofiber/fiber/v2"func SetupRoutes(app *fiber.App) { app.Post("/login", Login) app.Get("/users", GetUsers)}

Bu dosyam main modülden çağırılacak olan SetupRoutes adında bir public method içermekte. Peki bu Login ve GetUsers nerede? Bunları şimdilik basit örnek uzamasın diye user.go adında bir dosyaya aldım. Bu dosya ise örnek olarak şöyle olsun

func Login(c *fiber.Ctx) error { userLogin := new(models.UserLoginModel) if err := c.BodyParser(userLogin); err != nil {
return err
}
isUserValid := checkUserIsValid(userLogin)
responseModel := models.ResponseModel{
Success: true,
StatusCode: 200,
Message: "User logged in successfully",
}
if !isUserValid {
responseModel.Success = false
responseModel.StatusCode = 404
responseModel.Message = "User couldn't login successfully"
}
return c.Status(responseModel.StatusCode).JSON(responseModel)}

Ve ayrıca GetUsers fonksiyonu da şöyle olsun

func GetUsers(c *fiber.Ctx) error {
users := []models.User{
{
ID: 1,
FirstName: "Ali",
Surname: "GÖREN",
CreatedAt: time.Time{},
},
{
ID: 2,
FirstName: "Eren",
Surname: "Jeager",
CreatedAt: time.Time{},
},
}
return c.JSON(users)
}

Modeller burada temsili sunulmuştur. Ancak bu modelleri de farklı bir klasör altında toplayabilirsiniz. Şimdi gelelim main.go dosyamıza. Bu dosyada route’larımızı çağıran fonksiyonu çalıştıralım

package mainimport (
"github.com/gofiber/fiber/v2"
"log"
)
import "github.com/aligoren/go_fiber_project/routes"
func main() {
app := fiber.New()
routes.SetupRoutes(app) log.Fatal(app.Listen(":8080"))
}

Bu kadar :) gördüğünüz gibi ufak bir API oluşturmak NodeJS üzerinde Express ile API oluşturmak kadar kolay ve rahat.

Middleware konusuna kafanız takıldı mı bilmiyorum. Ancak bu da yine express rahatlığında :)

Örneğin biz delirdik ve gelen her şeyi console’a basacağız. Canımız sıkıldı. Bunun için bir middleware yazmak isteseydik şunu yazardık

func fenaLoglarim(c *fiber.Ctx) error {
log.Printf("Çok pis logladım ;) %s", c.Path())
return c.Next()
}

Sonra bu kararımızdan vazgeçmediğimizi dünyaya ilan edercesine main fonksiyonumuzu şöyle değiştirirdik

func main() {
app := fiber.New()
app.Use(fenaLoglarim) routes.SetupRoutes(app) log.Fatal(app.Listen(":8080"))
}

Bu kadar basit. Gördüğünüz gibi app.Use işimizi gördü burada.

Bu Aşamadan Sonra

Çok güzel buraya kadar geldiyseniz bu framework’e dair bir tık merakınız oluştu demektir. Buradan sonra GORM kullanarak veri tabanı uygulamaları yazabilirsiniz. Mesela bir kütüphane uygulaması. Tabii bunu yapmak istediğinizde ilk kafa karışıklığını gidermek için de kaynak arayacaksınız. O zaman size şu kaynakları sunabilirim;

Fiber’ın Kendi Doküman Sayfası

https://docs.gofiber.io/

Fiber Sıkça Sorulan Sorular Sayfası

https://docs.gofiber.io/extra/faq

Fiber Recipes. Bu repository’de birçok örnek projeyi bulabilirsiniz. Bu sayede projelerimi nasıl geliştirsem. Ne nasıl yapılıyor kaygısını yaşamazsınız

https://github.com/gofiber/recipes

Dahası? Ona bir şey diyemiyorum. Çünkü tamamen hayal gücünüz ve üşenmeme eşiğinizle alakalı bu :)

Umarım bu yazı size faydalı olmuştur. Okuduğunuz için teşekkür ederim

Kaynaklar