ساخت API بلاگ با Golang با استفاده از Gin and Gorm (قسمت 1)

Summarize this content to 400 words in Persian Lang
بررسی اجمالی پروژه
1. آنچه خواهید ساخت
شما یک وبلاگ API با قابلیت های زیر می سازید:
ثبت نام با نام کاربری، ایمیل و رمز عبور
با ایمیل و رمز عبور وارد شوید
پست جدید ایجاد کنید
به روز رسانی پست
یک پست خاص را بازیابی کنید
حذف پست
2. پیش نیازها
قبل از غواصی، مطمئن شوید که پیش نیازهای زیر را دارید:
برو درک اولیه Go و JWTsپستچیGitpsqlPostgreSQL روی دستگاه شما نصب شده است
راه اندازی پروژه
برای شروع پروژه مراحل زیر را دنبال کنید:
یک پوشه جدید به نام blog_api در دایرکتوری توسعه خود ایجاد کنید و در آن حرکت کنید.
mkdir blog_api
cd blog_api
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
با دستور زیر یک ماژول Go را راه اندازی کنید.
go mod init blog_api
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این تولید یک go.mod فایل برای ردیابی وابستگی های پروژه شما.
Dependencies را نصب کنید
این پروژه از چارچوب جین استفاده می کند. دستور زیر را برای نصب gin و سایر وابستگیهایی که استفاده خواهیم کرد اجرا کنید
go get github.com/gin-gonic/gin
go get github.com/jinzhu/gorm
go get golang.org/x/crypto/bcrypt
github.com/golang-jwt/jwt/v5
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون دایرکتوری های زیر را ایجاد کنید:
داخلی
داخلی/معتبر
داخلی / هندلر
داخلی/ذخیره سازی
داخلی/روتر
داخلی/مدل
پیکربندی
پایگاه داده
main.go
اتصال به Postgres
من فرض می کنم که شما postgres را قبلاً نصب کرده اید، اگر آن را نصب نکنیدیک پایگاه داده به نام blog_db ایجاد کنید
CREATE DATABASE blog_db;
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در پوشه پیکربندی خود یک فایل .env در دایرکتوری ریشه خود ایجاد کنید تا جزئیات پایگاه داده ما ذخیره شود
config/.env
DB_DSN=host=localhost user=yourusername password= your_password dbname=blog_db port=5432 sslmode=disable
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ایجاد مدل ها
ایجاد مدل برای User و Post
در پوشه داخلی/مدل خود، یک user.go و یک فایل post.go ایجاد کنید
Internal/model/user.go
package model
import “gorm.io/gorm”
type User struct {
Username string `gorm:”unique; not null”`
Email string `gorm:”unique; not null”`
Password string `gorm:”not null”`
Posts []Post `gorm:”foreignKey:AuthorID”`
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
داخلی/مدل/پست..برو
package model
import “gorm.io/gorm”
type Post struct {
gorm.Model
Title string `gorm:”not null”`
Content string `gorm:”not null”`
AuthorID uint
Author User `gorm:”foreignKey:AuthorID”`
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
راه اندازی پایگاه داده
ما اتصال پایگاه داده را با استفاده از gorm راه اندازی می کنیم. در پوشه داخلی/ذخیره سازی خود، یک فایل جدید به نام database.go ایجاد کنید.
interior/storage/database.go
package storage
import (
“log”
“os”
“blog-api/internal/model”
“gorm.io/driver/postgres”
“gorm.io/gorm”
)
DB *gorm.DB
func InitDB()
{
dsn := os.Getenv(“DB_DSN”)
db, err := gorm.open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal(“Failed to connect to database”, err)
}
db.Automigrate(&model.User{}, &model.Post{})
DB = db
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکنون فایل main.go را به صورت زیر تنظیم کنید:
package main
import (
“log”
“net/http”
“blog-api/internal/router”
“blog-api/internal/storage”
“github.com/joho/godotenv”
)
func main() {
err := godotenv.Load(“config/.env)
if err != nil {
log.Fatal(“Error loading .env file)
}
//initialize database
storage.InitDB()
//setup router
r := router.setupRouter()
log.Fatal(http.ListenAndServe(“:8080”, r))
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
توجه: setupRouter یک تابع در router.go ما است که روتر برنامه ما را راه اندازی می کند، در نظر داشته باشید، ما روتر خود را در قسمت بعدی وبلاگ راه اندازی خواهیم کرد.
Eun برنامه
برنامه را با استفاده از دستور اجرا کنید
go run main.go
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
بررسی اجمالی پروژه
1. آنچه خواهید ساخت
شما یک وبلاگ API با قابلیت های زیر می سازید:
-
ثبت نام با نام کاربری، ایمیل و رمز عبور
-
با ایمیل و رمز عبور وارد شوید
-
پست جدید ایجاد کنید
-
به روز رسانی پست
-
یک پست خاص را بازیابی کنید
-
حذف پست
2. پیش نیازها
قبل از غواصی، مطمئن شوید که پیش نیازهای زیر را دارید:
برو
درک اولیه Go و JWTs
پستچی
Git
psql
PostgreSQL روی دستگاه شما نصب شده است
راه اندازی پروژه
برای شروع پروژه مراحل زیر را دنبال کنید:
- یک پوشه جدید به نام blog_api در دایرکتوری توسعه خود ایجاد کنید و در آن حرکت کنید.
mkdir blog_api
cd blog_api
- با دستور زیر یک ماژول Go را راه اندازی کنید.
go mod init blog_api
این تولید یک go.mod فایل برای ردیابی وابستگی های پروژه شما.
- Dependencies را نصب کنید
این پروژه از چارچوب جین استفاده می کند. دستور زیر را برای نصب gin و سایر وابستگیهایی که استفاده خواهیم کرد اجرا کنید
go get github.com/gin-gonic/gin
go get github.com/jinzhu/gorm
go get golang.org/x/crypto/bcrypt
github.com/golang-jwt/jwt/v5
اکنون دایرکتوری های زیر را ایجاد کنید:
-
داخلی
-
داخلی/معتبر
-
داخلی / هندلر
-
داخلی/ذخیره سازی
-
داخلی/روتر
-
داخلی/مدل
-
پیکربندی
-
پایگاه داده
-
main.go
اتصال به Postgres
من فرض می کنم که شما postgres را قبلاً نصب کرده اید، اگر آن را نصب نکنید
یک پایگاه داده به نام blog_db ایجاد کنید
CREATE DATABASE blog_db;
در پوشه پیکربندی خود یک فایل .env در دایرکتوری ریشه خود ایجاد کنید تا جزئیات پایگاه داده ما ذخیره شود
config/.env
DB_DSN=host=localhost user=yourusername password= your_password dbname=blog_db port=5432 sslmode=disable
ایجاد مدل ها
ایجاد مدل برای User
و Post
در پوشه داخلی/مدل خود، یک user.go و یک فایل post.go ایجاد کنید
Internal/model/user.go
package model
import "gorm.io/gorm"
type User struct {
Username string `gorm:"unique; not null"`
Email string `gorm:"unique; not null"`
Password string `gorm:"not null"`
Posts []Post `gorm:"foreignKey:AuthorID"`
}
داخلی/مدل/پست..برو
package model
import "gorm.io/gorm"
type Post struct {
gorm.Model
Title string `gorm:"not null"`
Content string `gorm:"not null"`
AuthorID uint
Author User `gorm:"foreignKey:AuthorID"`
}
راه اندازی پایگاه داده
ما اتصال پایگاه داده را با استفاده از gorm راه اندازی می کنیم. در پوشه داخلی/ذخیره سازی خود، یک فایل جدید به نام database.go ایجاد کنید.
interior/storage/database.go
package storage
import (
"log"
"os"
"blog-api/internal/model"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
DB *gorm.DB
func InitDB()
{
dsn := os.Getenv("DB_DSN")
db, err := gorm.open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to database", err)
}
db.Automigrate(&model.User{}, &model.Post{})
DB = db
}
اکنون فایل main.go را به صورت زیر تنظیم کنید:
package main
import (
"log"
"net/http"
"blog-api/internal/router"
"blog-api/internal/storage"
"github.com/joho/godotenv"
)
func main() {
err := godotenv.Load("config/.env)
if err != nil {
log.Fatal("Error loading .env file)
}
//initialize database
storage.InitDB()
//setup router
r := router.setupRouter()
log.Fatal(http.ListenAndServe(":8080", r))
توجه: setupRouter یک تابع در router.go ما است که روتر برنامه ما را راه اندازی می کند، در نظر داشته باشید، ما روتر خود را در قسمت بعدی وبلاگ راه اندازی خواهیم کرد.
Eun برنامه
برنامه را با استفاده از دستور اجرا کنید
go run main.go